gpt4 book ai didi

C# 单元测试设计问题 : How to reduce redundancy in unit test writing?

转载 作者:太空狗 更新时间:2023-10-29 19:56:13 26 4
gpt4 key购买 nike

这是我的 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/

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