如何为读取文件并将文件路径作为参数的方法创建单元测试

Han*_*ody 5 c# nunit unit-testing

我知道这可能很容易,但由于我刚刚开始学习单元测试,我对所有的可能性有点困惑。

我有一个非常简单的方法,它应该从文件中读取整数(条件是文件仅包含整数,每个整数都存储在新行中)。

public static IEnumerable<int> ReadIntegers(string file)
{
    using (var stream = File.OpenText(file))
    {
        string line;
        while ((line = stream.ReadLine()) != null)
        {
            yield return int.Parse(line);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我继续之前,请不要建议我重构方法,我已经找到了它,并且我想学习如何为这个特定的输入参数和输出值编写单元测试。

我在另一个主题上发现有人建议在测试用例中创建一个测试文件,然后尝试将预期结果与实际结果进行比较,如下所示:

 [Test]
 public void ShouldValidateReadingOfTheFile()
 {
     string path = @"E:\TestFile.txt";
     using (var sw = File.AppendText(path))
     {
         sw.WriteLine(1);
         sw.WriteLine(100);
     }
     var expected = new List<int>() { 1, 100 };
     var actual = TestProject.Merge.ReadIntegersFromFile(path);
     Assert.IsTrue(expected.SequenceEqual(actual));
 }
Run Code Online (Sandbox Code Playgroud)

我想问你这是一个不好的做法吗?你有不同的方法吗?关于此方法的不同测试还有其他想法吗?谢谢!

Kev*_*lis 3

我认为你可以这样做unit-testing,但我建议你也测试特殊情况。

例如

  • null作为文件名
  • 一个空文件
  • 包含许多条目的大文件
  • 不仅包含整数的文件

创建测试文件是一种常见的做法。