gpt4 book ai didi

c# - 是否可以加快单元测试的时间?

转载 作者:行者123 更新时间:2023-11-28 20:38:43 27 4
gpt4 key购买 nike

是否有任何合理的方法可以加快(或伪造)单元测试的时间流逝?例如,如果您想测试线程中的信号,或者某些代码正确处理长时间运行的代码中的日/月/年日期更改?

我知道您可以在单独的测试中检查诸如日/年变化之类的事情,但是转向集成测试时,能够运行稳定的一周时间而无需等待一周的时间会很好……如果您每小时都有事情发生然后能够以某种快进机制驱动它。

最佳答案

正如@Nkosi 和@mike 在评论中提到的,您应该抽象接口(interface)背后的日期/时间 API,以便测试可以控制 CUT 将什么视为当前日期/时间。 Thread.Sleep 也是如此。这在单元测试中非常简单,尤其是在您进行 TDD 时。

对于集成测试或系统测试,这可能更具挑战性。在大多数情况下,这可以通过类似的方式解决,但 CUT 应该使用某种依赖注入(inject)机制。

我曾经是一个相当大的项目的自动化 TL,我们有这个需要。幸运的是,因为大部分代码已经被单元测试覆盖,所以大部分必须引用日期/时间的代码已经使用接口(interface)抽象出来了。此外,该系统在设计时考虑了可扩展性,并使用了 DI 机制。因此,可以注册一个 DLL,其中包含可以模拟时移的必要接口(interface)的实现。

当然,在测试和那个 DLL 之间有一些通信机制是必要的,因为 DLL 被加载到应用程序的进程中,这与测试的进程不同。

我们很快意识到的一件事是您永远不应该及时返回,即使在测试清理时也是如此,因为应用程序永远不会在现实世界中遇到这种情况。当您将整个环境恢复到已知状态时,您应该只将时间重置为当前时间。

再提醒一句:如果应用程序与依赖于日期/时间(甚至是数据库!)的外部系统交互,那么这可能对你不起作用,除非你完全抽象出外部系统,这在有些情况失去了集成测试的所有好处。

关于c# - 是否可以加快单元测试的时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42817040/

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