gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:46:00 26 4
gpt4 key购买 nike

我们有一个方法将文件夹名称和天数作为参数。

    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();
}
}

在 C# 中对此类方法进行单元测试的最佳方法是什么

最佳答案

实际上您不能对您的方法进行单元测试,因为它依赖于外部 API(FileSystem、DateTime)。

所以你应该做的是分离逻辑并与外部源集成,它可能看起来像这样:

public class MyFileInfo
{
public string FileName { get; set; }

public DateTime CreationTime { get; set; }
}

public interface IDateTimeProvider
{
DateTime GetCurrentTime();
}

public interface IMyFileSystemService
{
IEnumerable<MyFileInfo> GetFileInfos(string folder);

void DeleteFile(MyFileInfo myFileInfo);
}

public class MyService
{
private readonly IMyFileSystemService _myFileSystemService;
private readonly IDateTimeProvider _dateTimeProvider;

public MyService(IMyFileSystemService myFileSystemService, IDateTimeProvider dateTimeProvider)
{
_myFileSystemService = myFileSystemService;
_dateTimeProvider = dateTimeProvider;
}

public void Delete(string folder, int days)
{
var files = _myFileSystemService.GetFileInfos(folder);

foreach (var file in files)
{
var deleteOlderThan = _dateTimeProvider.GetCurrentTime().AddDays(-days);

if (file.CreationTime >= deleteOlderThan) continue;
_myFileSystemService.DeleteFile(file);
}
}
}

我认为接口(interface) IDateTimeProviderIMyFileSystemService 的实现应该不是问题。

现在您可以为 MyService.Delete 编写干净的单元测试

关于c# - 从文件夹中删除文件的单元测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50929407/

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