E. *_*rbo 3 .net c# oop datetime unit-testing
假设有班级
class Task
{
public DateTime StartedDate {get; private set;}
public Task()
{
StartedDate = DateTime.Now;
}
}
Run Code Online (Sandbox Code Playgroud)
我想测试在创建任务后开始处理任务的条件.因此,如果任务是在1月21日创建的,那么StartedDate
应始终是1月 21日.我不确定是否将一些时间提供程序传递给任务构造函数是一个好主意.
我不确定是否将一些时间提供程序传递给任务构造函数是一个好主意.
这是个好主意.引用DateTime.Now
被认为是对全局状态的依赖,不鼓励直接使用.关于构造函数 - 可能有人认为在构造函数中执行此操作也是一种不好的做法("在构造函数内部进行工作"),但这是一个不同的主题.
可测试性的最佳实践是创建一个小的包装器接口,以提供可以DateTime.Now
针对测试实施或模拟的当前时间.
虽然像Microsoft Fakes这样的测试框架能够替换DateTime.Now
getter,但设置和维护很复杂,只应在需要测试遗留代码时使用.
如果你碰巧已经在使用像System.Reactive
("Rx.NET")或NodaTime 这样的库,那么随着时间的推移它们已经有了抽象(IScheduler
对于rx,IClock
在NodaTime中).
归档时间: |
|
查看次数: |
663 次 |
最近记录: |