gpt4 book ai didi

c# - 对基于时间的组件进行单元测试?

转载 作者:太空狗 更新时间:2023-10-29 22:10:02 26 4
gpt4 key购买 nike

所以我正在编写一个缓存系统(不太复杂,但它具有非常好的语义),其中包含项目的 ttl(生存时间)。

当然 ttl 必须经过单元测试,但由于不能在 C# 中注入(inject)“IDateTime”或“ITimeSpan”的新实现(因为没有这样的东西),您将如何处理?

先写一个新组件“IDateTimeProvider”和“DateTimeProvider”,然后哪个可以mockup?

重新实现 .NET 运行时库的某些部分……是不是有点矫枉过正?

编辑:感谢大家的精彩回答!我现在确切地知道我要做什么了!

最佳答案

我通常使用 Ayende's solution 的变体.

public static class SystemTime
{
public static Func<DateTime> DateProvider = () => DateTime.Now;

public static DateTime Now { get { return DateProvider(); } }
}

在被测代码中,您现在可以使用 SystemTime.Now 获取当前时间:

var currentTime = SystemTime.Now;

并且在测试中您可以将当前时间设置为已知值:

SystemTime.DateProvider = () => new DateTime(2010,6,25);

关于c# - 对基于时间的组件进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3116736/

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