Directory.GetFiles的单元测试条件

N0x*_*xus 3 c# unit-testing

我之前从未使用过单元测试,但我想继续前进.现在我有我想要测试的最简单的方法:

public void GetAvailableFiles(string rootFolder)
{
   string[] dirs = Directory.GetFiles(rootFolder);
}
Run Code Online (Sandbox Code Playgroud)

我的单元测试如下:

[Test]
public void CheckDirectory()
{     
   AvailableFile fileUpload = new AvailableFile();
   fileUpload.GetAvailableFiles("C:\\Input");      
}
Run Code Online (Sandbox Code Playgroud)

当我调试它时,我返回目标位置中的所有文件.但是,我正在努力想出一个有效的条件,在这个条件下,这个测试可以验证它已经通过了.

我的想法是为这个测试预留一定数量的文件.我有10个文件,所以我应该期待10个结果.但是,我不确定如何用我所拥有的东西来写这个.

我该怎么办呢?

ope*_*wix 7

这不是单元测试.这是一个集成测试,因为您与文件系统进行交互.如果要进行单元测试,则必须将文件系统交互提取到接口.例如:

public interface IFileScanner {
   List<string> GetAvailableFiles(string folder);
}

[Test]
public void GetAvailableFiles_EmptyFolder_ReturnsEmptyList()
{     
   // Arrange
   IFileScanner scanner = new FileScannerEmptyFolderStub();

   // Act
   var list = scanner.GetAvailableFiles("dummy argument");

   // Assert
   Assert.IsTrue(list.Count == 0);
}
Run Code Online (Sandbox Code Playgroud)

我建议你在The art of unit testing with examples (Roy Osherove)编写单元测试之前先阅读书中的一些理论.

  • 是的,如果你想遵循单元测试的想法.但你现在可能不需要它.尽可能地编写测试.任何测试总比没有好 (4认同)
  • 我也建议,看看"嘲笑". (2认同)
  • 它看起来就像这样!但只有你编写的单元测试代码,没有点测试`Directory.GetFiles()`,因为它不是你的代码,你必须假设它有效(我想我已经测试过MS单元). (2认同)