C# 多文件删除方法单元测试成功
我最近问了一个问题,但没有得到一个我可以采取行动的答案。我认为这是由于包含了很长的代码示例。我决定用一个小得多的代码示例发布另一个问题。我想对下面的方法进行单元测试,以确保它能够工作,并确保它删除指定目录中的所有.xml文件C# 多文件删除方法单元测试成功,c#,unit-testing,dependency-injection,nunit,moq,C#,Unit Testing,Dependency Injection,Nunit,Moq,我最近问了一个问题,但没有得到一个我可以采取行动的答案。我认为这是由于包含了很长的代码示例。我决定用一个小得多的代码示例发布另一个问题。我想对下面的方法进行单元测试,以确保它能够工作,并确保它删除指定目录中的所有.xml文件 private static void DeleteXmlFiles(string XmlFileDirectory) { foreach (var file in Directory.GetFiles(XmlFileDirectory, "*.Xml"))
private static void DeleteXmlFiles(string XmlFileDirectory)
{
foreach (var file in Directory.GetFiles(XmlFileDirectory, "*.Xml"))
{
File.Delete(file);
}
}
有没有人有任何单元测试代码片段可以让我看看,在这种情况下对我有帮助
以下是我在测试方法中的全部内容,基本上不多:
[Test]
public void can_delete_all_files_from_specified_directory()
{
string inputDir = @"C:\TestFiles\";
var sut = new FilesUtility();
var deleteSuccess = sut.
}
此类测试的一种方法可能是:
目录
或文件
。因此,您有三种选择:
- 创建类所依赖的抽象,并为测试模拟该抽象(Moq将这样做)
- 模拟静态试验方法。Moq在这里帮不上忙,但这是可能的,等等
- 进行验收或集成测试而不是单元测试(有利于编写验收测试)
private string path = @"C:\TestFiles\";
[SetUp]
public void Setup()
{
Directory.CreateDirectory(path);
}
[TearDown]
public void Deardown()
{
Directory.Delete(path);
}
[Test]
public void ShouldRemoveAllFilesFromSpecifiedDirectory()
{
// seed directory with sample files
FileUtility.DeleteXmlFiles(path);
Assert.False(Directory.EnumerateFiles(path).Any());
}
没有办法用Moq或任何其他免费模拟框架来测试这些方法。这是因为他们不能模拟除虚拟或接口实现之外的方法(这在幕后基本相同) 要伪造(而非模拟)系统方法,如
File.Delete(…)
或任何类型的静态方法,您需要类似于Typemock(商业)或MS Moles(不是非常用户友好)的东西
作为一种解决方法,您可以在测试中创建一个测试目录和一些文件,在其中调用
DeleteXmlFiles(…)
,然后检查目录是否为空。但这会很慢,而且也不是真正的单元测试,更像是集成测试。Hi Sergey。谢谢你的回答。我理解你的方法,我想我将不得不使用最后一种方法——只有一件事:如何使用示例文件为目录种子。这可能是显而易见的,但我不确定。这是文件的手动复制粘贴吗?非常感谢。@Jetnor有几种可能性-最简单的方法是使用foreach(新[]{“foo.xml”,“bar.txt”}文件中的变量名)创建文件。创建(Path.Combine(Path,name)).Dispose()
您还可以使用Path.GetRandomFileName()
生成随机文件名,或者您可以将现有示例文件复制到目录中感谢您的帮助Sergey。