Професионална програма
Loading...
TonyDimitrov avatar TonyDimitrov 27 Точки

Как да направим Mock на DateTime.Now?

Една от задачите от OOP Advanced е да се тестват методите на DateTime.Now, примерно .AddDays(...) и другите....

Опитах с Moq но нещо не я докарвам до правилен резултат. 

PS: It is important that you test DateTime.Now, so don't use new DateTime()

А това е условието: https://pastebin.com/HMGj5w97

Ако някой иска да сподели решение или идея ще се радвам да го разгледам.

Тагове:
0
C# OOP Advanced
TeodorStefanovPld avatar TeodorStefanovPld 1275 Точки

това го има в запса от упражненията.но и реално ти няма защо да тестваш служебен клас на Visual studio,изгледай видеото на Божо и ще видиш за какво става въпрос.

-1
TonyDimitrov avatar TonyDimitrov 27 Точки

Знам, че по принцип няма нужда да се тестват служебни класове но такова е просто упражнението, в условието го пише. 

Иначе на упражнението от последната инстанция на курса не се стига до тая задача тя е пред последна. 

0
kolchakov96 avatar kolchakov96 3 Точки

Важно е да се абстракт-не работата с дати и време, защото след време като Unit Test-ваш кода си, който зависи от конкретен час на деня unit test-овете ще минават само в някои части на денонощието. Така че тва е добро упражнение.

Иначе си направи Клас с virtual методи или другият вариант е, който да имплементира интерфейс с методите на DateTime и те вътрешно просто да извикват оригиналните. По този начин с Moq ще може да се моква и тества оригиналната логика, която е wrap-ната под твой контрол.

0
31/07/2018 19:19:23
TeodorStefanovPld avatar TeodorStefanovPld 1275 Точки

даде пълно безумие,ако тръгне да ти се чупи там значи,ms са объркали нещо никои никъде няма да те накара да го тестваш това,освен ако не искаш 100% покритие на кода с unit test което е някаква химера.А ако искам да тествам нещо такова просто ще пусна определен час на теста и ще гледам какво ще стане няма да моквам самото време....

-2
kolchakov96 avatar kolchakov96 3 Точки

Въобще не е това проблема, да се съмняваш че ms не са написали както трябва нещата.

Проблемът е:

Имаш система, която в 12:00 часа наобяд трябва да прати мейл на потребителите си.

Ако напишеш unit test на тази функционалност и runnesh тест-а в час различен от 12:00 познай дали ще мине.

За тва мокваш DateTime и пускаш unit test-a със зададен от теб час. Тва е единствения начин в 17:00 да кажеш, че всъщност е 12:00 часа и теста да минава независимо от часа или датата, в който е пуснат.

 

И със сигурност не е подход като видиш код с DateTime да го "skip-ваш" и определно не да може да мине само в 1 секунда на деня. Естествено говорим, ако има нужда от Unit Test-ве, но това е съвсем различна тема.

И нека не навлизаме в спор кое е нужно да се абстрактва и кое не. Ествествено, че зависи от всичко.

Надявам се вече да си разбрал проблема и да не ти звучи че "давам пълно безумие" :)

Ето ти допълнително информация :)

1
01/08/2018 12:45:29