C# 有没有办法为具有任意值的线程/应用程序设置日期时间

C# 有没有办法为具有任意值的线程/应用程序设置日期时间,c#,testing,datetime,C#,Testing,Datetime,在我的一些自动化测试用例中,我需要这个。主要功能依赖于时间,如果我在没有记录的白天运行测试用例,这会导致测试用例失败 我知道我还有另一个相对繁琐的选项,可以模拟存储库并在运行时生成依赖于时间的数据,但是——我只想知道我是否可以以其他方式做到这一点——通过控制应用程序和/或线程的日期时间,例如DateTime。现在根据我在开始时设置的值返回值 真的有可能吗?TypeMock隔离器。不过,就我个人而言,我宁愿更改代码以注入一个IClock,并使用它。生产时钟可能使用DateTime.Now(或Utc

在我的一些自动化测试用例中,我需要这个。主要功能依赖于时间,如果我在没有记录的白天运行测试用例,这会导致测试用例失败

我知道我还有另一个相对繁琐的选项,可以模拟存储库并在运行时生成依赖于时间的数据,但是——我只想知道我是否可以以其他方式做到这一点——通过控制应用程序和/或线程的日期时间,例如DateTime。现在根据我在开始时设置的值返回值

真的有可能吗?

TypeMock隔离器。不过,就我个人而言,我宁愿更改代码以注入一个
IClock
,并使用它。生产时钟可能使用
DateTime.Now
(或
UtcNow
),但我可以简单、干净地提供模拟

如果这影响了太多的事情,可能是一个静态实现,因此您可以使用
Current.Time
或其他东西(其中
Current
是您的类),但它允许对测试进行间接/欺骗。事实上,可以使用上述方法,只需:

private static IClock clock = new DateTimeClock();
public static void SetClock(IClock clock) { Current.clock = clock; }
public static DateTime Time { get { return clock.Now; } }

谢谢,马克,你的解决方案很好。似乎没有“合法”的方式来设置日期时间。现在,时钟工厂是一个不错的选择。