这是我的 C# 单元测试设计问题:
我有一个测试,我想在一些修改文件的代码上运行。我的测试将运行修改文件的代码,然后检查结果。到目前为止非常简单......
问题是,我有大约 10 个文件(很快就会更多)要针对它们运行相同的单元测试。当测试本身确实相同时,我不想为每个文件编写新的单元测试。
我可以编写一个测试来查询文件夹中的文件,然后对每个文件运行测试逻辑,但使用这种方法只会报告整组文件的一个通过/失败结果。
我想创建某种动态系统,我放置在特定文件夹中的每个文件都会通过相同的单元测试运行。因此,如果文件夹中有 25 个文件,测试将运行 25 次,并且单元测试结果报告运行了 25 次测试,并包括每个测试的单独通过/失败。
关于如何或是否可以在 C# 单元测试中完成的任何想法?或者使用 nunit 测试?
谢谢!我希望这不是一个重复的问题。我环顾四周,但我找不到任何东西。
最佳答案
听起来您需要的是参数化测试用例:请参阅 http://www.nunit.org/index.php?p=testCaseSource&r=2.5 .
所以:
[TestFixture]
public class Tests
{
static string[] FileNames = new string[]
{ "mary.txt", "mungo.txt", "midge.txt" };
[Test, TestCaseSource("FileNames")]
public void TestMethod(string fileName)
{
Assert.That(File.Exists(fileName));
}
}
[TestCaseSource]
属性告诉 NUnit 从字符串数组中获取字符串参数的值。
但是,该方法需要文件名的静态 常量。如果您更愿意使用从数据库等读取文件的编程方法,请尝试像这样的工厂类:
[TestFixture]
public class Tests
{
[Test, TestCaseSource(typeof(FilenameFactory), "FileNames")]
public bool FileCheck(string fileName)
{
return File.Exists(fileName);
}
}
public class FilenameFactory
{
public static IEnumerable FileNames
{
get
{
foreach (var filename in
Directory.EnumerateFiles(Environment.CurrentDirectory))
{
yield return new TestCaseData(filename).Returns(true);
}
}
}
}
TestCaseData
类生成“测试用例”,其期望值可以通过流畅的界面设置。
关于C# 单元测试设计问题 : How to reduce redundancy in unit test writing?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7763508/