use*_*418 5 c# unit-testing moq
我们有一个方法,它将文件夹名称和天数作为参数。
public void Delete(string folder, int days)
{
var files = Directory.GetFiles(folder);
foreach (var file in files)
{
var fi = new FileInfo(file);
var fiCreationTime = fi.CreationTime;
var deleteOlderThan= DateTime.Now.AddDays(-days);
if (fiCreationTime >= deleteOlderThan) continue;
fi.Delete();
}
}
Run Code Online (Sandbox Code Playgroud)
在 C# 中对此类方法进行单元测试的最佳方法是什么
100% 的解决方案是必须注入很多这样的东西,因为它要么有副作用,要么是非确定性的:
1) Directory.GetFiles
2) new FileInfo(file)
3) fi.CreationTime
4) DateTime.Now.AddDays
5) fi.Delete
Run Code Online (Sandbox Code Playgroud)
因此,您可以在生产中注入一个日期时间服务,该服务返回日期时间,而在测试中它总是返回某个固定日期。并使用模拟框架来检查有时调用删除方法,有时不调用它。
| 归档时间: |
|
| 查看次数: |
2986 次 |
| 最近记录: |