在我的一些自动化测试案例中,我需要这个。主要功能是时间相关的,如果我在没有记录的白天运行它们,这会导致测试用例失败。
我知道我有另一个但相对乏味的选择,即模拟存储库并在运行时生成时间相关的数据,但是 - 我只是想知道我是否可以通过其他方式执行此操作 - 通过控制应用程序的DateTime和/或者线程,以便DateTime.Now根据我在开始时设置的内容返回值?
真的有可能吗?
答案 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; } }