2013-03-11 41 views
2

如何参数化C#单元测试,以便代替一系列类似的assert语句,测试将遍历参数列表(包括预期值),并将结果与​​期望值进行比较值?C#单元测试:遍历预期结果列表

使用案例:

  • 这个特别的单元测试需要检查一个XML文件,并办理XML元素名称列表,验证文档中包含这些元素和它们的值相匹配的期望是什么
该测试方法的

断言部分包括一系列的断言这样的:

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

我想avoi d冗余代码,并用不同的值迭代相同的代码。我如何定义一个数据结构来遍历断言检查?

所需的数据结构是元组列表(在这种情况下包含元素的类型(XName,字符串))。如何在C#中表达这一点?是否有一些标准的单元测试工具可以在这里提供帮助?

的更多信息:

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

你使用什么单元测试库? – 2013-03-11 16:49:14

+1

针对该问题添加了单元测试框架。这是Visual Studio测试框架。 – CaptSolo 2013-03-11 16:54:10

+1

更新了问题:添加了用例描述;添加信息.Net 3.5。 - 似乎在.Net 4.0中,答案将是使用元组列表并遍历它。 – CaptSolo 2013-03-11 17:35:09

回答

2

Nunit有一些称为TestCases的东西,您可以通过属性访问它。这听起来像你所要求的:

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

UPDATE:

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

UPDATE

这个问题看起来也有相关性:MS Test Equivalent(或缺少)

Does MSTest have an equivalent to NUnit's TestCase?

+0

似乎有一些支持MSTest中的数据驱动测试,我已经提到了一些证明这一点的资源。 – 2013-03-11 16:59:06

+1

我需要在调用要测试的方法之后,通过断言检查代码的一个片段进行迭代。如果整个测试用例需要重新运行,TestCase属性将会很有帮助,但在这种情况下不会。 – CaptSolo 2013-03-11 16:59:10

+1

感谢您的答案。我在原始问题中添加了一个解释,说明只有断言部分需要迭代 - 如果您有关于如何进一步澄清问题的建议,请让我知道 – CaptSolo 2013-03-11 17:27:54

0

既然你说你正在使用MSTEST,这里有几个资源从MSDNindependent blog使用微软的单元测试框架,说明驱动的测试数据。

总之,您需要在TestMethod中指定DataSource属性并将其指向数据源。它可以是CSV或SQL Server CE。

1

好像你只需要解压的方法,以满足您的要求的字面需要:

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,并将其用作测试中的常量,并声明创建了正确的对象。此测试因实现细节原因而失败,但没关系。如果我打破了与数据格式的向后兼容性,它就会迫使我注意。

+1

谢谢 - 将断言代码提取到另一个函数使解决方案更加明确。 - 但它并没有解决如何定义元素名称列表和期望值迭代的主要问题。通过定义一个Dictionary 并修改AssertElements *函数来遍历这个字典来解决这个问题。 – CaptSolo 2013-03-17 08:02:24