从文件夹中删除文件的单元测试方法

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# 中对此类方法进行单元测试的最佳方法是什么

Tho*_*lle 1

100% 的解决方案是必须注入很多这样的东西,因为它要么有副作用,要么是非确定性的:

1) Directory.GetFiles
2) new FileInfo(file)
3) fi.CreationTime
4) DateTime.Now.AddDays
5) fi.Delete
Run Code Online (Sandbox Code Playgroud)

因此,您可以在生产中注入一个日期时间服务,该服务返回日期时间,而在测试中它总是返回某个固定日期。并使用模拟框架来检查有时调用删除方法,有时不调用它。