有没有办法为具有任意值的线程/应用程序设置DateTime

时间:2011-09-08 07:08:56

标签: c# testing datetime

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

我知道我有另一个但相对乏味的选择,即模拟存储库并在运行时生成时间相关的数据,但是 - 我只是想知道我是否可以通过其他方式执行此操作 - 通过控制应用程序的DateTime和/或者线程,以便DateTime.Now根据我在开始时设置的内容返回值?

真的有可能吗?

1 个答案:

答案 0 :(得分:2)

TypeMock隔离器claims to be able to do this。但就个人而言,我宁愿更改我的代码以注入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; } }