---
title: "Working with Typemock Isolator"
url: "https://courses.osherove.com/courses/tdd-in-net-in-hebrew/working-with-typemock-isolator.md"
canonical: "https://courses.osherove.com/courses/tdd-in-net-in-hebrew/working-with-typemock-isolator/"
tags: []
author: "Roy Osherove"
description: "Lesson 14 of 22 in TDD in .NET in Hebrew (Day 2 - Legacy Code Tools), 26:41. Free video by Roy Osherove."
usage: "Licensed under CC BY 4.0 — reuse, quote and adapt with attribution (Roy Osherove, link to the original page)."
license: "https://creativecommons.org/licenses/by/4.0/"
---

# Working with Typemock Isolator

1. [Courses](https://courses.osherove.com/#courses)
2. [TDD in .NET in Hebrew](https://courses.osherove.com/courses/tdd-in-net-in-hebrew/)
3. Day 2 - Legacy Code Tools

Lesson 14 of 22

Duration: 26:41 [Watch on YouTube](https://www.youtube.com/watch?v=vO-KpCDopU8) Spoken in Hebrew

## In this lesson

Roy Osherove shows [Typemock Isolator](https://osherove.com/blog/2009/7/9/minimizing-unit-test-fragility-8-features-in-typemock-isolat.html "Minimizing unit Test Fragility – 8 features in Typemock Isolator to help (osherove.com)"), a [profiler-based framework](https://livebook.manning.com/book/the-art-of-unit-testing-second-edition/chapter-6#ch06lev1sec1 "Constrained and unconstrained frameworks (The Art of Unit Testing, 2nd ed., ch. 6)") for code that cannot be refactored: its API starts with Isolate, it can [fake](https://livebook.manning.com/book/the-art-of-unit-testing-second-edition/chapter-4#ch04lev1sec2 "The difference between mocks and stubs (The Art of Unit Testing, 2nd ed., ch. 4)") any class, including ones with private constructors, and it verifies calls with any or exact arguments. He explains the Isolated attribute that cleans up static fakes after each test and the profiler environment variables that Visual Studio plugins and command-line runners set, as [Moles](https://osherove.com/blog/2010/5/25/justmock-and-moles-a-short-overview-for-tdd-alpha-geeks.html "JustMock and Moles – A short overview for TDD alpha geeks (osherove.com)") and JustMock also need. He then fakes static methods, future instances and non-public members without touching production code, mentions [SilverUnit](https://osherove.com/blog/2009/2/25/introducing-silverunit.html "Introducing SilverUnit (osherove.com)") and [CThru](https://osherove.com/blog/2009/2/25/adding-method-missing-support-to-vbnet-using-ctru-and-typemo.html "Adding Method-Missing support to VB.NET using CTru and Typemock Open-AOP (osherove.com)"), which he built on Isolator, and asks the group to test the original exercise code this way.

## Transcript

3,628 words

[\[00:03\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=3s) מדהים מצחיק לא הופך את הפרודקש קוד למכואר מאוד אני קור לזה אקסטר ואבריט בגלל שנורא קל להתמכר לדבר הזה בכלל לא להוסיף אינטרפייסים לא שום דבר יצא לי לעבוד בכמה פרויקטים שבהם נכנסו ללגסי דודמות ופשוט דברים מה זה זרמו אקסטרקט ממש ממש היה כיף עכשיו לגסי עוד גם ככה לא מכוער אז יחסית אתה יודע כל כל קוץ במדבר פרח קוראים לזה עכשיו נדבר קצת על טמיסור מה קורה כשאי אפשר לשנות אתח קוד מה קורה כשלא רוצים או כשרוצים להוסיף פיצ'ר חדש

[\[00:35\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=35s) על על גבי קוד קיים שאין לו testים במקרה כזה אי אפשר לעשות refacctטורing עם הקוד עם אגration test פופ כלים או profיילר bas כמו [Isolator](https://osherove.com/blog/2006/9/27/using-typemock-vs-design-for-testability.html "Using TypeMock vs. Design for testability (osherove.com)") נכנסים מאוד חזק לעבודה אבל קודם כל לפני שנתחיל עם הלגסיקות נתחיל דווקא עם הAPI הכי בסיסי כי האיסוליטור כמו הפריים אחרים נותן גם את אותם דברים שדיברנו נו עליהם קודם אלה שני הטestטים הבסיסיים שדיברנו עליהם רק עם isolator. אז אם אם מדברים על design decisions אז בisolator

[\[01:11\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=71s) בדומה ל [FakeItEasy](https://osherove.com/blog/2012/6/26/fakeiteasy-or-nsubstitute-which-should-i-use-for-samples-in.html "FakeItEasy or NSubstitute? Which should I use for samples in art of unit testing 2nd edition? (osherove.com)") הכל מתחיל באותה מילה תמיד זה מתחיל במילה isolate והרעיון הוא שאם אתה לא זוכר את הAPI תמיד מילהate זה הדבר הראשון שאתה יכול לחשוב עליו גם פה אין את המילים [מוק](https://livebook.manning.com/book/the-art-of-unit-testing-third-edition/chapter-4#sigil_toc_id_76 "Interaction testing, mocks, and stubs (The Art of Unit Testing, 3rd ed., ch. 4)") [וסטאב](https://livebook.manning.com/book/the-art-of-unit-testing-third-edition/chapter-3#sigil_toc_id_62 "Reasons to use stubs (The Art of Unit Testing, 3rd ed., ch. 3)") יש תמיד [פייק](https://livebook.manning.com/book/the-art-of-unit-testing-second-edition/chapter-4#ch04lev1sec2 "The difference between mocks and stubs (The Art of Unit Testing, 2nd ed., ch. 4)") אבל הAPI שלו הוא מאוד מאוד חזק אלה המקרים הכי בסיסיים שינה משהו בכלל >> כן גם פחות רואים אצל >> אחלה

[\[01:41\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=101s) בליפלקש בן אדם חייך בטלוויזיה בכל אז אם אני רוצה לייצר instance של [fake](https://livebook.manning.com/book/the-art-of-unit-testing-second-edition/chapter-5#ch05lev1sec2 "Dynamically creating a fake object (The Art of Unit Testing, 2nd ed., ch. 5)") logger כל מה שאני עושה זה isolate fake instance שלoger שיש פה רמה אחת אקסטר של API כי בנוסף לפייק אפשר לעשות עוד הרבה דברים דווקא בגלל היכולות האלה אז זה משהו שב בהתחלה בapi תמיד שוכחים לעשות isolate fake אילוגoger תמיד עושים וזה משהו שהוא עדיין לא אני חושב שבהחלט יכול להשתפר

[\[02:13\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=133s) אמ אז בגדול אסוליטור הוא נוקד באותה גישה שהוא מחזיר לך ישר את האובייקט אבל בגלל שהוא גם לא משתמש בפרוקסי אז אפשר לעשות איתו הרבה יותר דברים לדוגמה לא אפשר לא רק לעשות פייק לאיילוגoger אפשר לעשות פייק לכל קלאס אפשר לעשות פייק גם לקלאסים שיש להם prrivateט conסטrucטור מה שאי אפשר לעשות עם הפוקסy framewמוקס שולחים את הakeer ואז הverיפיקציה היא בisolate. ‏by default יש שלושה דברים שאפשר לעשות or was called with any arguments or was called with exact arguments שזה מה שיש פה or was called with arguments

[\[02:51\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=171s) Matching ששם אפשר לעשות את כל הguments שיכולנו לעשות עם האחרים עכשיו לטעמי הAPI שסיימנו איתו מבחינת המצרing של של הארגומנטים הוא לא נוח מספיק הוא אפילו מבלבל ב f take FakeItEasy ובendסבסיטute ובמוק האגum maters הם יותר טובים ואני חושב שזה משהו שאם הייתי יורד שם היום הייתי משנה ולכן בדרך כלל משתמש אך ורק ב was called with exact arguments or was called with any arguments

[\[03:22\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=202s) ואני משאיר את האחרים ואני לא משתמש בהם בכלל >> אז סליחה אז מה מה אתה עושה לגביס string contטינס כאילו שאתה >> אז ככה לפעמים אני באמת משתמש בהם או שאני עושה את ה או שאני עושה אה את הדבר השני שזה נקרא isolate isolate when call שמקבל לדה ריקה ופה אני יכול לקחת כל object כולל live object

[\[03:55\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=235s) זאת אומרת משהו שלא עשו לו פיק אפילו אבל פה זה יכול להיות fake i logger fake ioger right by default לאolator לא אכפת מהפרמטרים אז לא משנה מה אני אשלח פה אני יכול לשלוח נלד defaultט הוא הדפלט שלו זה any אני יכול להגיד do inadד זה לו את נקודה right

[\[04:27\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=267s) אה יש פה will throw יש פה col orגנal למה יש פה מעניין יש פה אה יכול להיות שיש לי פה גרסה ישנה שאין עלי את הדסט בקיצור אני צריך להתקן את הגרסה שלי אבל בתרון יש לי פה דיןסד כמו שיש כל בט במוק שאני יכול לקחת את הפרמטרים ולעשות עליהם אסרטים ויפיים או לשמור אותם מאחר כך אני יכול זה מה שאני אוהב לעשות >> מה >> אני יכול לעשות את זה ל לפ ל לפ ל לפי זאת אומרת נגיד אם האינסטנס נוצר בתוך המתודה שאני בודק >> כן >> אני רוצה ש כאילו

[\[05:02\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=302s) המתודה שאני בודק עושה ני למשהו ואני רוצה שהי שנוצר כשהוא קורא למתודה את זה >> כן אנחנו נראה את זה תכף אבל קודם נתחיל דווקא מהדברים הבסיסיים כי אחרי זה אנחנו נבנה על זה אז חשוב שתבינו את הI בסיסי אז יש לי fake instance קריאה וverify was call was call with any ופה אפשר לשלוח מה שרוצים עכשיו נראה את המקרה של מוק וstב אז אם אני רוצה לעשות stab loger שזורק exception אני אומר isolate when call fake looger right עוד פעם לא אכפת לי מהסטרים ‏will throw new logger exception אומר שזה מדבר בלשון עתיד

[\[05:42\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=342s) ואז אני יכול לעשות verify was cod מדבר בלשון עבר fake servicיice right עוד פעם לא אכפת לו מהפרמטר זה הכי פשוט שבעולם שלחנו את שניהם בפרמטרים אין פה שום דבר שקשור ללגסי קוד אבל מה שיפה זה שאני יכול באותה מידה לעשות ככה רגע, לפני שאני ממשיך, יש משהו חשוב לגבי הנושא שזה בגלל שזה פרופיילר, אז יש כמה דברים שצריך לעשות שאי אפשר לעשות בפריורקים אחרים.

[\[06:18\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=378s) יש פה אטריבט מיוחד שנקרא isolated. אפשר או לשים אותו על כל test או לשים אותו פעם אחת ברמת הtest fixure הisolated זה אטריבט מיוחד שבעצם עושה cleanupפ של הדברים הסטטיים שאנחנו הולכים לעשות. אם אנחנו אומרים לפונקציה סטטית מעכשיו להתנהג בצורה מסוימת אז היא תתנהג ככה עד סוף הפרocess אזated אומר לטפisolator שבסוף כל test ינקה את כל הבי ששמנו אז במקום שאני צריך לעשות down ולהגידור cleanup שזה עוד API שאפשר לעשות

[\[06:56\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=416s) אז אפשר במקום זה פשוט לשים את האיולטed אם לא תשימו את זה יהיה לכם הרבה אפקטים שקשה מאוד להבין אותם. פתאום הטestטים יתחילו להתשל תבינו למה. עוד דבר חשוב כשמריצים את isolator. בגלל שהוא משתמש בפרופילר API, הפרייל API הוא לא enable by default. הוא לא enable by default. זה אומר שאם אני אסתם מריס את הטesting שלי הtypolור לא יעבוד.

[\[07:27\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=447s) כדי שהפרופי יעבוד צריך להיות שני environment variables בococess שבו הפרופיילר עובד. זה יש שני שמות פשוט שמים להם x01 וגומרים עניין אבל צריך שזה יהיה את זה בזמן שהפרo רץ ואז הprofilers הם enable זה סוג של secקurity שיש בד defaultט וצריך להיות אדמניסטרטור כדי שהפרופיילרים ירוץו מה שאומר שהרבה פעמים אתם תצטרכו להריס את הטסטים בתור אדמיניסטרטור כדי לקבל את התוצאות האלה או לפחות בקונפיגורציה הראשונית

[\[08:01\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=481s) במהלך ההתקנה בגלל זה כשמתקינים את Isolator אז הוא מתקין גם פגין בתוךסוד שבעצם כל התפקיד שלו רוב התפקיד שלו זה ש-Visual Studio ירוץ אוטומטית כבר עם הenvironment variables האלה enable ואז כשVisual Studio מתחיל את הtest processes אז גם אם זה MSTest או unit זה לא משנה באיזה test runer ty יותר עובד עם כולם לא אכפת לו הוא מוודא שהchesses גם יהיה להם את הvir

[\[08:32\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=512s) אז אם אתם סתם תכתבו את הsmi שלטור ותנסו להריץ את ה-NUnit או את הIT command בלי הvirה כל הטestטים יקשלו אז אם מריצים את זה מתוך יש את הפגין שלator שברגע שהתקנתם זה כבר build in וזה פשוט יעבוד אם אתם מריצים את זה בקנדלי line בפסטור מגיע עם tmxl שכל מה שהוא עושה זה אתם נותנו את הקומנדל lineין של מה שהייתם רוצים להריץ בלי tx והוא פשוט מריץ את אותו דבר אבל עושה enable לinvement variable זה הטוב אז כל התפקיד שלו וככה אפשר להריץ את זה בקמנדל line בבילד וכולי

[\[09:09\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=549s) עוד דברים חשובים זהו בד אלה הדברים שצריך לדעת בגלל שזה פרופיילר base אז אז חייב להיות varable דרך אגב זה גם אומר שאם אתם משתמשים ב-Moles אז גם צריך את הvement variabl האלה אז ב-Moles גם יש לו plugג לתוך studio וגם יש לו commנ מיוחד והוא צריך host אם אתם משתמשים ב-Visual Studio 2011 אז הוא צריך לעשות host process מיוחד בתוך אטריוט ודברים מאוד מוזרים כאלה כדי לקבל בדיוק את אותו אפקט גם [JustMock](https://osherove.com/blog/2010/5/25/justmock-and-moles-a-short-overview-for-tdd-alpha-geeks.html "JustMock and Moles – A short overview for TDD alpha geeks (osherove.com)") מטלריק

[\[09:40\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=580s) יש לו את אותם conסנט שהוא צריךפגין ויש לו קומנדי מיוחד כדי להריץ את זה עם דברים אין פה שום שונה אבל זה תמיד משותף לכל הדברים האלה מה קורה אם אני רוצה לעבוד עם הלogי maner with statics אז כל מה שאני רוצה לעשות זה לבדוק שהלוגר שלי נקרא אז מה שאני יכול לעשות זה קודם כל להשתלט על כל המתודות הסטטיות של הלוגר. אם אני רוצה להתחיל לעקוב אחריהם, אני צריך להגיד לטימוק להתחיל לעקוב אחריהם.

[\[10:14\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=614s) אז אני יכול להגיד ככה isolate fake static methods ואני יכול לתת לו או שם של classסג geny לדוגמה static loger אבל יש classסים שהם static classes וזה וזה לא יכול לעבוד בתוך genס במקרה כזה יש overload שפשוט מקבל tyפ אז אתם פשוט אומרים tyפ of static cloger זה לא יעבוד ב יש לכם קלאסים שהם סטטיים בקוד >> בודאי לאטיק

[\[10:44\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=644s) ממש >> אוקיי אתם מה ההבדל בין קלאס שהוא סטייקס לקס שהוא לא סטטי >> קסמנציאצי אפשר להוסיף לו nonסטatic meods בגדול מבחינת הקפילר אוקיי אז הייתי אומר לכם פשוט תורידו את המילה statטיק זה לא כזה משנה לא חושב שנש יכול להיות exנשod לא יכולים להיות בקלאסט לא בטוח כן כן בלי בטוח נכון כן בסדר exנש מוד אתה לא צריך לעשות את זה גם אבל אם אתה באמת רוצה אז אתה יכול פשוט לכתוב

[\[11:18\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=678s) ואז אין ד אפשר >> בטח שאפשר >> כן אבל אז אתה פשוט נותן type of static logoer במקום הגנרקט type ואז זה עובד בסדר עכשיו מה שקורה המתודה הזאת היא הולכת על כל הסטטיקס בקס ועושה להם פיק ואז אם מחר יש לך עוד שלוש שהוספת by defaultט הם יהיו fake וזה חשוב מבחינת maטity אז אבל אם הייתי רוצה רק להשתלט על אחת מהם הייתי יכול להגיד isolate when call

[\[11:49\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=709s) אותו למדה שהיה לי גם קודם static loger right לא אכפת לי עם איזהסטרינקודה נגנור קוד ומאותו רגע המתודה הסטטית הזאת לא תעבוד דרך אגב באותה מידה זה גם יכול להיות extension אין שום בעיה בסדר אז אז גם עובדים ככה ההבדל בין הקריאה הזאת לקריאה שמ מעליה היא שהקריאה הזאת היא פחות מינable אז אם זה כל מה שאני צריך סתם שזה יהיה פייק הייתי כבר עושה פיק לכל הסטatטקic meods כי זה בדרך כלל מה שתרצו לעשות ואז שיש לו statטקוד אחד בדרך כלל לא אכפת לכם גם מאחרים אלים כן אתם בודקים אחד ואז אתם יכולים להגיד fake everything ואז when call על זה אתם יכולים להגיד call

[\[12:32\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=752s) >> זה עושה over כאילו >> בדיוק זה תמיד לפי האחרון בסדר ואז בעצם זה עושה אינורס כן אה עשית משהו מיוחד בקומפילציה של סטטיקלוגיות כדי לאפשר את הפרופיילינג הזה או שזה יכול להיות כל דבר >> פרופיילינג זה חלק מהCLR זה לא קשור בכלל לקוד שאני כותב חות >> ככה DLL כבר קיים מקופה על הפילוה שלך ולעשות את כל הדבר הזה בעצם מה שהרבה אנשים עושים הם עושים פייק ל-SharePoint למרות שלא הם כתבו את זה אז הם עושים פייק לזה שכשאתה מריץ משהו ב-ASP.NET

[\[13:02\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=782s) אז זה עושה פייק לפיג בפיג רוב המתוד שלו סטיר לhthp rec אפשר לעשות פייקים בעצם תקח כל dlיקרוסופט crm whatverבר תעשה לזה פייק אין שום בעיה כי התהליך הוא אותו תהליך כן >> כשאנחנו מוסיפים כאלה דברים כמו calls נגיד להפעיל משהו >> כן >> אנחנו יכולים לעשות את זה כמה פעמים או לבטל נגיד חוקים שהגדרנו כאלו >> כן אתה יכול לעשות אתה יכול להגיד שבפעם הראשונה תעשה אוריגנal ופעם שנייה שת תעשה את זה אז אתה יכול להגיד will throw exception ואז אחד הוא יעשה ומאותו רגע הוא יזרוק אפtion עד סוף הפוס >> נו אז זה תמיד דורס את הפעולה >> זה לא דורס ברגע שמת שניים עושה Q >> אה אוקיי >> כן אבל האחרון נשאר >> אז הוא קורא לו אוריגנל ואז אחר כך עושה

[\[13:49\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=829s) >> כן במיוחד שאתה עושה ככה ואז אני יכול לראות בטest שזה יהיה הסדר של הפעולות עוד דברים עכשיו אם אני רוצה לבדוק שהפונקציה נקראה אני יכול להגיד was called with any ‏argumentס אוקיי אז תחשבו מבחינתי אני עושה פייק לדבר הזה ואז אני בודק שהוא ניכר >> גם כאן יש את הקולבק נכון >> יש את הקולבק תמיד זה לא משנה מתי הקולבק הוא קולבק אני יכול להגיד זה זה

[\[14:22\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=862s) עוד דברים חשובים זה באמת קצה הקרחון זה רק הדבר הכי בסיסי שבדרך כלל נורא נורא קל להראות אתם אני הייתי שמח שאחרי זה אתם תנסו את זה על המחשב שלכם כי זה לא משנה כמה אני אראה לכם את זה שיש לי גרסה קצת יותר ישנה עדיף שתעשו את זה מגרסה האחרונה הנה אותו דבר עם static loger static we תעשה לי fake לstatic me של static we servic ler

[\[14:54\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=894s) When static loger right will thr new ler exception ify was with any argum static בעצם אני לא חייב לגעת בכלל בפודקש קוד כדי שהדבר הזה יעבוד אני לא צריך לשנות שום דבר שאלות לגבי זה נכון תשימו לב אין לי פה מוק וסטאב נכון אין לי פה בכלל את המשהו שאני עושה ליפי אני הולך ישר לדפנenנס עצמו ואני בודק אותו אוקיי תך דברים יותר מעניינים אוקיי,

[\[15:32\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=932s) עכשיו נלך לfuture objects. אם אני רוצה להשתלט על future object, אני יכול לעשות גם את זה. אני יכול לעשות fake instance של reloger ואז להגיד isolate swap next instance של reloger with fake loger. אוקיי? ואז בפעם הבאה שיהיה fake instance הוא לא באמת יחליף אותו. מה שהוא יעשה שיעשה interטרceפtion לכל הקריאות על הרeloger פשוט יעשה להם לפיק instance שלנו. ואז אני יכול לעשות verify was called על הפיק looger שלי שעדיין בעצם לא נוצר כביכול

[\[16:02\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=962s) אבל הקריאה הזאת היא לא מספיק maable בגלל מה קורה אם יצרו 100נסים של הדבר הזה זה יעבוד רק לראשון יש instance לא allפס אין בעיה פקס swפ יופי אז זה באמת גרסה ישנה כי בגרסה החדשה יש all instanceses שמאפשרת בעצם לעשות את אותו דבר אבל היא עובדת גם על כל האינסטנסים הקיימים וגם על כל האינסטנסים הבאים 100,000 לא משנה גם אם יש לכםסינגלטון של loger נקסance אז הוא בעצם מוחלף באותו רגע בפיק אסנס שלכם

[\[16:41\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1001s) אוקיי >> זה רטרוקטיבי אתה אומר >> רטרוקטיבית בדיוק זאת אומרת זה עושה אינטרספט לכל דבר מהטייפ הזהו על זה כ >> זה ייצר חדש אחד או ש >> הוא לא צריך הוא לא ייצר שום דבר הוא פשוט עושה אינטרספט כל פעם שיעורי קריאה לטייפ הזה תחשבו על זה כאנט נקי אבל מבחינת הצורת עבודה שלנו בPI זה נראה כביכול אנחנו יוצרים איסטנס אבל הסיבה היחידה שאנחנו יוצרים את האינסטס הזה זה כדי שנוכל לקנפג אותו לעשות עליו verify וכולי אבל האינס הזה הוא בסך הכל הרדירקט שלנו ועליו נוכל לבדוק את הדברים הוא מייצג לנו את כל האינסטנסים

[\[17:14\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1034s) בסדר אם היו טestטים קודמים שקראו משהו שהיה עשה נירגד >> אם היו טסים קודמים אז חשוב בשגל זה לשים את האייסולטד הזה אחרת הטestטים יכולים להתערב אחד בשני וזה מנקה בין test לטestט את כל הטריות וכל הדברים כן >> זה עובד גם על קלאסים שורשים מריגר במקרה הזה כלומר איך זה מתנהג עם תורשעה >> אני זוכר שפעם זה לא עבד ואם אני לא יודע אם הוסיפו את הפיצ'ר הזה שזה גם אתה יכול להגיד כל הדברים שיורשים אבל אני לא באמת סופר אני צריך לבדוק את זה אוקיי

[\[17:50\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1070s) אמ אז ככה אני יכול להגיד שכל ‏future instances recפג את הrger instance שימו לב זה לא משנה באמת אם יש לי או לא משנה מה והנס instance פשוט רוק אז אני יכול ככה לדמות המון דברים בלי לגעת בפרק מבחינתy c זה יכול לפתור המון בע >> אה שאלה שעלתה מהכיוון של שי שאני טוהל לגביה בסדר אה אנחנו בעצם רק עושים אינטרס למתודות כאן נכון >> מה זאת אומרת >> אנחנו לא מחליפים לאף אחד את האינסטנס האינסטנס נשאר >> זה זה מה שאמרתי האינסטנס לא באמת מוחלף מבחינת הדיבגר אתה תראה אבל האיסולטר יודע להראות לך בדבאגר שזה פיק אינסטנס ודרך אגב זהטר הוא היחיד שיודע שאם אתה מדבג איזשהיא קריאה של הפיק instance בדבאגר נגיד אתה משנה אותו או אתה עושה לפרטי ואמרת לו להחזיר פעם אחת שלוש אז הוא יודע הוא מספיק חכם להגיד

[\[18:50\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1130s) אה ראו את זה בדבאגר אז אני לא אתייחס לזה זאת אומרת הוא לא משנה את ההתנהגות שלו בגלל שראית אותו בדבאגר אתה האינסטנס מבחינת הקוד הוא אתה לא רואה שום דבר >> השאלה היא לגביס >> השאלה היא לגבי לוקים אם אני אעשה קל על אינסטנס של טיפוס מסוים >> כן >> ואני מחליף אותו >> אה >> האם זה יכול איכשהו לפגוע לי בלוגיקה אותו ולכן חשוב אתה לא מחליף אותו זה בסך הכל אינטרספט על האנס מבחינת ה זה נראה כמו אז אינטרספט >> בכל מקבל אתה לא בד קסדים אז לא משנה לא אבל הוא שואל האם אתה יכול להריד

[\[19:25\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1165s) Test עם typ שזה דרך אגב הרבה אנשים עושים הרבה אנשים עושים integraation tests אני גם הכרתי אנשים שלקחו השתמשו בטyוק סתם כדי לפתור איזה באג של אחד הפלאגינים ביזל סטודיו מה שיש פלאגין של איזה אחד מהmים שאני זוכר שמישהו אמר תשמעו הנה אני משתמש בטימוק הסתכלתי ברפלקטור ראיתי שיש שם בעיה בבאג אבל עד שהם יעשו אז אני אז זה מריץ פלאגין משלי שמריץ טקוטו ומשתלט על האינסטance הקיים של הפלאגין בVUDI

[\[19:58\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1198s) ומשנה לו את ההתנהגות יש עוד אנשים שמשתמשים בזה כדי לעשות פייק לכל ה-SharePoint איפסטרקר כדי שהם יוכלו לעשות להריץ את ה-SharePoint איך קוראים לזה הטלט כאלה >> >> אבל בלי בלי להריץ SharePoint serverבר כן אז כדי להריץ ארט בסרבר לוקלי מה התחובה עם האם עושים פיקט פיקט אי אפשר לעשות כי זה בספורלי זה בכוונה מנוטר

[\[20:36\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1236s) מהצל לראות מה יכול >> תנסה לעשות את זה עם מולז אני לא יודע אם אפשר נראה לי שגם שם אי אפשר עוד שאלות שורה הוא מחליף כרג נראה do state שהap כרגע לא מאפשר אבל אני מקבל קונטקסט לקונטקסט יש פרמטרים ואז אני יכול לבדוק את הערך של כל פרמטר לשמור את המידע ולעשות עם זה משהו אוד דברים חשובים אוקיי מבחינת הAPI יש עוד כמה דברים נחמדים

[\[21:10\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1270s) Isolate non publicק הרבה פעמים בקוד לגסי מה לעשות יש דברים שהם ‏non puיק ואתה כן רוצה לבדוק אותם או לפחות רוצה לשנות את הבייר שלהם אוקיי אז אני יכול להגיד non public w public property אוקס ופה לתת strינגים עם השמות של הפונקציות אני גם יכול לתת שמות של non public static ואז אני נותן לי את הטyפ שעליו הסטטיק נמצא בסדר אז יש לי איזה priveי statטיק איפשהו ומשום מה אני לא יכול לעשות אותו פאבליק אני יכול עדיין לשר את הבי שלי אין שום בעיה פשוט ההבדל היחיד הוא שאין לי intellicence.

[\[21:48\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1308s) בסדר? זה באמת היכולת של פרופיל. זה באמת לא משנה. מה אני מנסה לעשות פייק? אני יכול לעשות isolate fake static conסטור שלי מסוים. ואז אני יכול להגיד אם יש לי סטy קונסטרקטור שאוטומטית הולך וקורה קונפיגורציה אז אני יכול להשתמש בזה כדי לנטרל את הקונפיגורציה ולהריז את המערכת בזיכרון. אני השתמשתי ביכולת הזאת הרבה כתבתי framewורק שלם שנקרא [SilverUnit](https://osherove.com/videos/2009/8/25/unit-testing-in-silverlight-silverunit-and-ms-sliverlight-te.html "Unit Testing in Silverlight - SilverUnit and MS Sliverlight Test Framework (osherove.com)") והוא מאפשר לעשות [unit testing](https://livebook.manning.com/book/the-art-of-unit-testing-third-edition/chapter-1#sigil_toc_id_17 "Defining unit testing, step by step (The Art of Unit Testing, 3rd ed., ch. 1)") של

[\[22:23\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1343s) קונטרולים שלסילברלי בליסברלי בלי brזר אז הוא בעצם מה שהוא עושה הוא עושה פיק לכל ה-Silverlight אפסטקuc מלמטה ועושה פייק של הכל של האבנטים של הקריאה לבראוזר של וכולי אבל אז במגום לעשות פייק ברמה הקרובה ביותר לפני השטח הוא עושה פייק ברמה הנמוכה ביותר זאת אומרת הוא הולך ואומר אה בסוף כולם קוראים לפונקציה הזאת הזאת. אוקיי אז נעשה פיק לפונקציה הזאת שהיא נמצאת שלוש חבות למטה באיזשהו ביס קלאס שאף אחד לא מכיר ואף אחד לא רואה ומה שמעניין היה זה שזה בכלל שזה עמד בפני ארבע גרסאות של סילבריט ולא הייתי צריך לשנות אפילו שורה של קוד רק בגרסה האחרונה של סילברליט היה צריך לשנות איזה כמה שורות של קוד כדי שהדבר הזה ימשיך לעבוד עכשיו איך עשיתי את זה יש exensibility mean לאolator

[\[23:11\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1391s) בסator יש dll שנקראי אתם יכולים להירשם שם להוקים של שבעצם מה שעשינו זה חספנו את ההוקים של של הפרופיילר כביכול פרופיילר חספנו low level hs שמאפשרים לכם לבנות ty מייסטור משלכם זאת אומרת אתם מקבלים את השם של המתודה שעומדת להיקרה את הפרמטרים שלה ואז אתם יכולים לבנות פריימורק שלם לדוגמה אני אראה לכם איך זה נראה

[\[23:47\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1427s) אוקיי אז בניתי פריורק שלם של openource שנקרא [CThru](https://osherove.com/blog/2009/2/25/adding-method-missing-support-to-vbnet-using-ctru-and-typemo.html "Adding Method-Missing support to VB.NET using CTru and Typemock Open-AOP (osherove.com)") שמשהו מאפשר יופי לא כלום מדהים הסקול עובד רק לכיוון אחד לא יודע איך זה קורה אולי יש פה איזה טייפמוק מותקן אני לא יודע אוקיי אמ אז לדוגמה אז הספרו הוא בנוי על גבי הtym hooksס והוא מאפשר API נורא נחמד אז אתה יכול לבנות דברים כמו fluent AOP אז אני יכול להחליט שאני בונה framewor שנראה ככה אני יוצר new AOP ואני אומר AOP skip method whenever

[\[24:28\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1468s) Arguments type name contains under test ואז זה לא משנה בכלל מה או תלך לכל המתודות שיש להם יותר משני הארגומנטים ותגרום להם להחזיר אפtion אתם מבינים סוג הדבר דברים שאתה יכול לעשות עם הדברים האלה זה סוג הדברים שאתה יכול לבנות איתם פריימורקים בשביל טestטים זאת אומרת לקחת מייקרוסופט CRM דברים שאתה יורש מהם ולהגיד אני יכול רוצה עכשיו לבדוק משהו בלי האינפסטרקצר שלו בסדר זה סוג הדברים ש שבאים רק עם אחרי אחרי שמגיע הצורך אז בנינו אז יש פרימוק שלם שבנוי על tyפורק שנקרא וואי כבר שכחתי את השם שלו כל המטרה של הפריורק הזה זה לעשות עשות fake לasp.netwages אתפג יש לו API שאתה יכול לעשות פיק לובes

[\[25:12\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1512s) יכולת לעשות את זה עם טקנוק אבל זה ייקח המון המון קוד אז הוא בעצם נותן לך API ממש ממש נחמד שבדפולט כבר פותר לך את כל הבעיות אתה רק אומר לו מה יקרה מתי ההתנהגות וגם מהר זה נורא נחמד שאלות >> מה זה הקונטeקסט שם בתוך דיןסד >> איפה נכון >> בקוד כן >> הקונטeקסט זה בעצם הנותן לי את הפרמטרים את השם של המתודה כל הדברים מהסד מה את עושה שם >> במקרה הזה? >> שורה אחת של הסמה לתוך טקסט לא מקרה זה אני סתם שומר את זה שופר

[\[25:46\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1546s) >> זאת אומרת זה מה שאני בדרך כלל עושה במקום להשתמש ב was called with arguments mature בסדר כי אני מאוד לא אוהב את הapi הזה זה אני חושב אחת הטעיות הגדולות שלי שזה נתתי לapi הזה לקרות אבל זה דברים שלומדים רק מניסיון מאוד אהבנו אותו כשיצרנו אותו וכבר אז כבר לא זכרתי איך משתמשים בו עד כדי כך הוא מסובך למרות שהוא עושה דברים מדמים. עוד שאלות. טוב, אז מה שנעשה עד 5 :3 תתקינו טימוק

[\[26:21\]](https://www.youtube.com/watch?v=vO-KpCDopU8&t=1581s) ותנסו לכתוב את הטestטים של הפuture object או של הסטיק. תבחרו לכם אבל תיקחו את הזיפייל המקורי לפני ששיניתם אותו ועשיתם בריפקטור ותראו אם אתם יכולים לכתוב את אותם טסטים בלי לגעת בפרודקש. בסדר? בהצלחה לצקר.

## Related

- [Constrained and unconstrained frameworks](https://livebook.manning.com/book/the-art-of-unit-testing-second-edition/chapter-6#ch06lev1sec1) · The Art of Unit Testing, 2nd ed., ch. 6

    Constrained versus unconstrained frameworks, explaining why profiler-based Isolator can fake statics and any class.

- [Isolator Feature Focus: Duck Typing and Isolate.Swap](https://osherove.com/blog/2008/11/2/isolator-feature-focus-duck-typing-and-isolateswap.html) · osherove.com

    Covers Isolate.Swap, related to the future-instance faking the lesson demonstrates without touching production code.

- [JustMock and Moles – A short overview for TDD alpha geeks](https://osherove.com/blog/2010/5/25/justmock-and-moles-a-short-overview-for-tdd-alpha-geeks.html) · osherove.com

    Overview of JustMock and Moles, the other profiler-based tools the lesson says need the same setup.

- [Is Typemock too powerful? Will it kill design for testability?](https://osherove.com/blog/2008/1/17/is-typemock-too-powerful-will-it-kill-design-for-testability.html) · osherove.com

    Debates whether faking anything with Typemock hurts design for testability, a natural question after this demo.

### Also linked in this lesson

#### The Art of Unit Testing, 3rd ed.

- [Interaction testing, mocks, and stubs](https://livebook.manning.com/book/the-art-of-unit-testing-third-edition/chapter-4#sigil_toc_id_76), ch. 4
- [Reasons to use stubs](https://livebook.manning.com/book/the-art-of-unit-testing-third-edition/chapter-3#sigil_toc_id_62), ch. 3
- [Defining unit testing, step by step](https://livebook.manning.com/book/the-art-of-unit-testing-third-edition/chapter-1#sigil_toc_id_17), ch. 1

#### The Art of Unit Testing, 2nd ed.

- [The difference between mocks and stubs](https://livebook.manning.com/book/the-art-of-unit-testing-second-edition/chapter-4#ch04lev1sec2), ch. 4
- [Dynamically creating a fake object](https://livebook.manning.com/book/the-art-of-unit-testing-second-edition/chapter-5#ch05lev1sec2), ch. 5

#### osherove.com

- [Minimizing unit Test Fragility – 8 features in Typemock Isolator to help](https://osherove.com/blog/2009/7/9/minimizing-unit-test-fragility-8-features-in-typemock-isolat.html)
- [Introducing SilverUnit](https://osherove.com/blog/2009/2/25/introducing-silverunit.html)
- [Adding Method-Missing support to VB.NET using CTru and Typemock Open-AOP](https://osherove.com/blog/2009/2/25/adding-method-missing-support-to-vbnet-using-ctru-and-typemo.html)
- [Using TypeMock vs. Design for testability](https://osherove.com/blog/2006/9/27/using-typemock-vs-design-for-testability.html)
- [FakeItEasy or NSubstitute? Which should I use for samples in art of unit testing 2nd edition?](https://osherove.com/blog/2012/6/26/fakeiteasy-or-nsubstitute-which-should-i-use-for-samples-in.html)
- [Unit Testing in Silverlight - SilverUnit and MS Sliverlight Test Framework](https://osherove.com/videos/2009/8/25/unit-testing-in-silverlight-silverunit-and-ms-sliverlight-te.html)

[Previous lesson Controlling Time](https://courses.osherove.com/courses/tdd-in-net-in-hebrew/controlling-time/) [Next lesson Day 2 Summary](https://courses.osherove.com/courses/tdd-in-net-in-hebrew/day-2-summary/)


---

## About the author

**Roy Osherove**: Senior Solutions Architect at AWS working on AI for production and AI-driven development; author of The Art of Unit Testing and Elastic Leadership, with about 20 years of consulting and training on unit testing, TDD, team leadership and continuous delivery.

### Sites

- [RobotPaper](https://robotpaper.ai/): This blog: AI patterns and anti-patterns, AI and coding agents, and engineering leadership.
- [osherove.com](https://osherove.com): Roy's personal site. Author of The Art of Unit Testing and Elastic Leadership; consulting and training on unit testing, TDD, team leadership and continuous delivery, plus about 20 years of blog posts.
- [The Art of Unit Testing](https://www.artofunittesting.com): The Art of Unit Testing, 3rd Edition (Manning): readable, maintainable, trustworthy unit tests, plus TDD workshops in C#, JavaScript, Java and Kotlin.
- [5whys.com](https://www.5whys.com): Roy's writing on software team leadership: self-organizing teams, surviving chaos, learning mode and the Elastic Leadership model.
- [Pipeline Driven](https://pipelinedriven.org): Continuous delivery and DevOps practices: build patterns, pipeline-friendly testing, DevOps metrics and enterprise DevOps.
- [Elastic Leadership](https://www.elasticleadership.com): Elastic Leadership, Roy's framework for software team leaders (survival, learning and self-organizing modes).

### Social

- X: https://x.com/royosherove
- LinkedIn: https://www.linkedin.com/in/osherove/

### Contact

- Contact form: https://forms.gle/jQSx5KoXvrVA1JCK7

### License

Licensed under CC BY 4.0 — reuse, quote and adapt with attribution (Roy Osherove, link to the original page). License: https://creativecommons.org/licenses/by/4.0/
