有没有一种方法可以为线程/应用程序设置任意值的DateTime ?

本文关键字:应用程序 线程 设置 任意值 DateTime 一种 方法 有没有 | 更新日期: 2023-09-27 18:08:11

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

我知道我有另一个但相对乏味的选项来模拟存储库并在运行时生成与时间相关的数据,但是-我只是想知道我是否可以以其他方式做到这一点-通过控制应用程序和/或线程的DateTime,例如DateTime。现在返回基于我在开始某处设置的值?

这真的可能吗?

有没有一种方法可以为线程/应用程序设置任意值的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; } }