Когда вы пишете модульные тесты, важно, чтобы тесты выполнялись одинаково, каждый раз, когда вы их запускаете.
Если ваш тест (или тестируемый код) использует DateTime.Now
(илиDateTime.UtcNow
), то при каждом запуске вы будете получать другой результат теста (при условии, что вы тестируете свойство, содержащее DateTime
).
Если вы абстрагируете DateTime
в интерфейс, выможно сделать так, чтобы при выполнении теста он всегда возвращал одно и то же время при вызове INowResolver.Now
.
Пример: В этом тесте время всегда будет 1 января 2018.
public class MyTest
{
public class TestNow : INowResolver
{
public DateTime Now {get;set;}
public DateTime GetNow() => Now;
}
[Test]
public void MyTest()
{
var resolver = new TestNow { Now = new DateTime(2018,1,1) }
var testClass = new TestClass(resolver);
}
}
На самом деле, если во всех случаях я использовал этот метод, Now
- это свойство, как и в DateTime.Now
, а не функция.