自定义NUnit GUI以进行数据驱动的测试

时间:2011-02-09 05:55:05

标签: nunit

我的测试项目包含一组输入数据文件,这些文件被输入到一个传统的第三方软件中。由于这个软件的输入数据文件很难构建(不能有意识地完成),我不打算添加新的输入数据文件。

每个输入数据文件都将受到一组“测试功能”的约束。某些测试函数可以独立调用。其他测试函数表示顺序操作的阶段 - 如果前一阶段失败,则不需要执行后续阶段。

我已经尝试了NUnit参数化测试用例(TestCaseAttribute和TestCaseSourceAttribute),并将数据文件列表作为测试用例传入。我通常对选择输入数据进行测试的能力感到满意。

但是,我想看看是否可以自定义其GUI的树结构,以便“测试功能”成为“输入数据”的子代。例如:

  • 文件#1
    • CheckFileTypeTest
    • GetFileTopLevelStructureTest
    • CompleteProcessTest
      • StageOneTest
      • StageTwoTest
      • StageThreeTest
  • 文件#2
    • CheckFileTypeTest
    • GetFileTopLevelStructureTest
    • CompleteProcessTest
      • StageOneTest
      • StageTwoTest
      • StageThreeTest

这对于识别在处理特定输入文件期间失败的阶段非常有用。

是否有任何可以启用新树布局的提示和技巧?我是否需要自定义NUnit才能获得此布局?

已编辑:有关分离测试数据和测试代码概念的介绍,请参阅问题Term for unit testing that separates test logic from test result data。在我的情况下,分离是由实际问题驱动的,而不是出于意识形态的原因。我的测试数据文件的来源是“在野外”。

数据驱动测试的其他轶事用法:

1 个答案:

答案 0 :(得分:0)

您可能无法像这样完全模拟结构。测试只能存在于TestFixtures(类)中,并且唯一允许您在GUI中嵌套任意级别的是命名空间。

你能做的是:

* File001 (namespace)
  * Tests_File001 (class, text fixture)
    * CheckFileTypeTest (method, test)
    * GetFileTopLevelStructureTest (method, test)
  * CompleteProcessTest (namespace)
    * TestsCompleteProcessTest (class, text fixture)
      * StageOneTest (method, test)
      * StageTwoTest (method, test)
      * StageThreeTest (method, test)

我假设您目前的设置更多

[Test]
[TestCaseSource("TestFiles")]
public void StageOneTest(String file)
{
}

其中一个测试方法检查特定事物,并为每个文件运行该测试。在这种情况下,您只需删除属性并从新测试中调用此方法。

我也觉得您希望测试按特定顺序执行,不同的测试运行程序以不同的顺序执行测试。我不知道有任何办法这样做,一般来说你不应该这样做。没有测试应该依赖于另一项成功的测试。

假设您的测试有些时间密集,如果“早期”测试已经失败,您不想运行所有“后期”测试,您可以考虑将它们放在适当的类别中,例如:“Preliminary”,“Stage1”然后你可以在另一个之后执行一个类别,看看第一个类别失败的地方。

我希望这会对你有所帮助。