gpt4 book ai didi

c# - future C# 中的单元测试调度程序

转载 作者:太空狗 更新时间:2023-10-30 00:57:34 25 4
gpt4 key购买 nike

我在我的应用程序的调度程序项目(类库)中使用 quartz.NET,这是因为我希望其他项目与实际实现无关。将来,如果我想为 CaSTLe Scheduler 或 Windows Scheduler 或其他任何东西更改 quartz,我将可以灵活地进行更改。

我需要在我的 Quartz.NET 项目上每周对触发器进行单元测试,我开始研究并发现目前看来是一个很酷的解决方案 MOLES这个扩展基本上允许我更改 DateTime.Now 并走向 future !

在这种情况下,从现在开始一周后,当触发器计划触发时,但在等待了一段时间后,我遗憾地发现我的触发器没有被激活,即使在更改时间和 Thread.Sleeping 几分钟后也是如此...

我想走向 future 的原因是因为在应用程序中我对每种请求使用不同的方法/触发器,例如每周、每周重复、每月、每年

还有其他人对这种场景进行过单元测试吗?

我路过什么东西吗?

MOLES 有可能吗?

最佳答案

如何实现类似的东西

public interface IClock
{
DateTime Now { get; }
}

public class FakeClock : IClock
{
DateTime Now { get; set; }
}

public class SystemClock : IClock
{
DateTime Now { get { return DateTime.Now; } }
}

在开发外观时,您可以通过将对 DateTime.Now 的每次调用替换为 IClock.Now,使您的代码依赖于 IClock。

IClock 依赖项可以作为构造函数参数传递或直接传递给需要它的每个方法。

然后,您的生产代码将使用 SystemClock 实例,您的测试可以依赖 FakeClock 类型来操纵时间并验证某些操作确实在预期的时刻发生。

这种设计(控制反转)极大地受益于使用依赖注入(inject)容器,例如 CaSTLe Windsor、StructureMap、AutoFac ......

注意:为了进一步引用,本 post 中讨论了类似的实现建议.

关于c# - future C# 中的单元测试调度程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4893510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com