c#单元测试:迭代期望的结果列表

本文关键字:结果 列表 期望 迭代 单元测试 | 更新日期: 2023-09-27 18:03:34

如何参数化c#单元测试,以便测试将迭代参数列表(包括期望值)并将结果与期望值进行比较,而不是一系列类似的断言语句?

用例:

  • 这个特定的单元测试需要检查XML文档,并遍历XML元素名称列表,验证文档包含这些元素及其值是否符合预期

Assert测试方法的一部分由一系列断言组成,如下所示:

var width = output.Element(namespace + "width");
Assert.IsNotNull(width);
Assert.AreEqual(width.Value, "600");

我想避免冗余的代码和迭代相同的代码与不同的值代替。如何定义在断言检查中迭代的数据结构?

所需的数据结构是一个元组列表(在本例中包含类型为(XName, string)的元素)。如何在c#中表达呢?这里是否有一些标准的单元测试工具可以提供帮助?

更多信息:

    使用VisualStudio单元测试框架(Microsoft.VisualStudio.TestTools.UnitTesting)和。net 3.5
  • 需要运行用例本身与各种参数值,只是断言部分(上面引用的代码)

c#单元测试:迭代期望的结果列表

Nunit有一个叫做testcase的东西,你可以通过一个属性来访问它。这听起来像是你想要的:

http://nunit.org/?p=testCase& r = 2.5

更新:

在指定使用的框架的问题更新之前提供了这个答案

这个问题看起来也有相关性:MS测试等效(或缺乏)

MSTest是否有一个等价于NUnit's TestCase?

似乎您只需要提取一个方法来满足您的文字请求需求:

public void AssertElementExistsWithValue(XmlElement parent, string nameSpace, string childName, string value)
{
    var child = parent.Element(namespace + childName);
    Assert.IsNotNull(child);
    Assert.AreEqual(child.Value, "600");    
}
我通常使用Linq Xml类,所以如果我有一个编译错误,我道歉。我相信你会明白要点的。

当我测试xml格式时,我通常编写两个测试。第一个是往返测试:将实体写入xml,读回来,断言它们是相同的。这是一个很好的面向值的测试,即使更改了元素的名称也不会中断。

我编写的第二个测试将精确地固定XML的格式。我从一个格式正确的对象中获取xml,并将其用作测试中的常量,并断言创建了正确的对象。由于实现细节的原因,这个测试失败了,但是没关系。它迫使我注意到我是否破坏了数据格式的向后兼容性。

既然你说你正在使用mstest,这里有一些来自MSDN和独立博客的资源,说明使用微软的单元测试框架进行数据驱动测试。

总之,您需要在TestMethod中指定一个DataSource属性,并将其指向数据源。CSV文件或SQL Server CE文件