Lesson 13 of 22
Controlling Time
In this lesson
Roy Osherove applies extract and override (external link, opens in new tab) to the machine name as well, then explains why it does not suit time, which is used throughout a system. Instead he adds an API to a central system time class (external link, opens in new tab) so tests can set the current time, and resets it after each test because the change is static and affects other tests. He argues that a static class is not bad design in itself, suggests making the setter internal and visible to the test assembly (external link, opens in new tab), and sends the group to implement it in the exercises.
Transcript
[00:04] (external link, opens in new tab) אני רוצה קצת לדבר על הנושא של איך להכניס זמן ולשלוס לו זמן בטestטים שלנו כי דלת בבקשה >> אבל קודם כל אני אני אעבוד על הנושא של הכל ובסרביes אני קצת אראה את הכיוון קודם כל עשיתי אקסטרctט ועכשיו אני אעשה אקסטר גם למשינר שמת לב דרך אגב ברגע שעשיתם אקסטר פעם אחת כל שני נהיה די פשוט ברגע שהפטרן מובן אז פתאום אוקיי יאללה משינה עם עודual מט לא כזה נורא אז זה מטיק לא נורא מטו כן
[00:44] (external link, opens in new tab) אולי נעשה גט משימה name ככה שאני יכול לקצג את הlogin maner זה חשוב מאוד
[01:17] (external link, opens in new tab) Verion אף פעם לא עושה בשום דבר לדוגמה אני רוצה להגיד name will אוקיי עכשיו יכולתי גם את אותו דבר לעשות עם מזמן create field לעשות פה
[01:50] (external link, opens in new tab) שם יותר ש אוקיי אבל מה לגבי זמן לגבי זמן הנושא של אקסט לא כל כך מתאים כי זמן כמשהו שמשתמשים בו במערכת משתמשים בו בצורה רוכבית אז לעשות אקסטרד עכשיו בכל הקלאסים שמשתמשים בזמן יכול לקחת הרבה זמן אז במקום זה מה שנעשה זה נחשוב על פאטרן אחר.
[02:21] (external link, opens in new tab) אחד הדברים הכי בסיסיים שיש לכם כבר היום בדיזיין זה קלאס שנקרא time אז מה שהייתי רוצה לעשות בטסט שלי זה לכתוב ככה time אליי אני קורא לזה syיסטם time אצלכם זה יקרה time set new time
[02:57] (external link, opens in new tab) ובעצם מה שאני עושה פה אני מוסיף API מיוחד לטיים שלי במיוחד כדי שבטestטים שלי אני אוכל לשלוט בזמן מאותו רגע כל מי שמש בתים יהיה לו את הזמן שאני קבעתי אבל יש פה סכנה כי מן הסתם אני משפיע על טestטים אחרים אז כשאני משנה משהו במשהו ברמה סטטית אז אני צריך לעשות לו אנדו אחרי כל public after test
[03:28] (external link, opens in new tab) לשמור שט כל מה שאני צריך זה להגיד syסם time reset ומאותו רגע הוא יחזור להחזיר את הD time now בדיוק כמו שהוא עשה קודם כל מה שיש לו זה איזשהו פלי עכשיו אם אני באמת מפחד שיגעו בזה וזה משהו שאני יכול לראות אולי למ שיפדו לגעת בו לעשות הנג אז אז אני את זה אני באמת עושה internal ו משתמש ב-InternalsVisibleTo לtest assembly שלי אז תשימו לב שה הפטר פה הוא שאני בכלל לא עושה inject שום dependency.
[03:59] (external link, opens in new tab) כל מה שאני עושה זה אני הולך למקום שבו גם ככה יש לי מקום מרכזי שממנו אני לוקח את ה-tיים דווקא בגלל שזה משהו כל כך מרכזי במערכת אז זה שזה סטטי לא אומר שזה דיזיין גרוע שימו לב אני פשוט הופך את הדיזיין לtestable ועל ידי זה שאני מוסיף איזשהו setר ורסט רק חשוב לא לשכוח לעשות את הטרדאן הזה בסוף כל אחד מהם שאלות את הסט >> מה >> איך מישמים את הסט >> את הסט זה יש מיליון דרכים ליישם את זה.
[04:31] (external link, opens in new tab) זה יכול להיות כן בהנחה שהדבר הזה היה בפרודקשן זה יכול להיות ברמה של פילד שהוא נלב זה יכול להיות ברמה של איזשהו פלאג כן fake (external link, opens in new tab) time שווה day time ומה אותו רגע
[05:04] (external link, opens in new tab) כן כן אפשר להגיד ישפ אפשר גם לעשות אותו ואז לבדוק אם הוא לא נעל ואז להחזיר את הטיים בדוק זה משנה העיקר שזה יעבוד משתמשים בקלאס הזה במקום כאילו בד time >> אצלך כבר יש את זה >> יש לכם קלאס שנקרא אתם לא צריכים לסוריס במקום אתם פשוט מוסיפים set לטלק מבחרים במ >> אפשר אולי לעשות אפילו כדי לאחוב את זה שאף אחד לא ישכח את ה אבל using דורש instance כלשהו כדי שתוכל לעשות לו dispose time by default הוא סוג שלו להמציא אסנס לצורך זה להמציא אסance ואיך והאינס הזה יעשה setט לזה ולעשות
[05:43] (external link, opens in new tab) אחלה מצוין אין שום בעיה מה שחשוב זה שהכדי לשלוט במשהו מרכזי אז פשוט מוסיפים למרכזי הזה יכולת להחליף את המידע שלו זה לא כזה נורא להפך זה אפילו מומלץ אם גם ככה כל המערכת משתמשת בזה אז אם אם לא כל המערכת משתמשת לזה אז מאותו רגע צריך לוודא שבכל המערכת בכל מקום שיוצים די פשוט משתמשים בטיים בסדר עוד משהו כשקוד רביו מאוד יכול לעזור פה דרך אגב אוקיי אני ממליץ בחום
[06:14] (external link, opens in new tab) אה שאלות לגבי זה אוקיי אמ אז מה שאני רוצה זה שבהתאם לטכניקה הזאת לכו תלמשו את את ה את הדרישה האחרונה של די טיים באמצעות הטכניקה הזאת תיצרו אצלכם את הקסטר הזה ואז תמשיכו גם לתרגילים של הogin manager with future בסדר