为数据驱动测试定制NUnit GUI

为数据驱动测试定制NUnit GUI,nunit,Nunit,我的测试项目由一组输入数据文件组成,输入到一个遗留的第三方软件中。由于该软件的输入数据文件很难构建,而不是有意创建,因此我不打算添加新的输入数据文件 每个输入数据文件将接受一组测试功能。一些测试函数可以独立调用。其他测试功能表示顺序操作的各个阶段-如果早期阶段失败,则不需要执行后续阶段 我已经使用NUnit参数化测试用例TestCaseAttribute和TestCaseSourceAttribute进行了实验,将数据文件列表作为测试用例传递。我通常对选择输入数据进行测试的能力感到满意 然而,我

我的测试项目由一组输入数据文件组成,输入到一个遗留的第三方软件中。由于该软件的输入数据文件很难构建,而不是有意创建,因此我不打算添加新的输入数据文件

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

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

然而,我想看看是否有可能定制其GUI的树结构,以便测试函数成为输入数据的子函数。例如:

文件1 CheckFileTypeTest GetFileTopLevelStructureTest 完全过程测试 舞台测试 舞台酒店 舞台预演 文件2 CheckFileTypeTest GetFileTopLevelStructureTest 完全过程测试 舞台测试 舞台酒店 舞台预演 这将有助于识别在处理特定输入文件期间失败的阶段

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

已编辑:有关分离测试数据和测试代码的概念的介绍,请参见问题。在我的情况下,这种分离是由实际问题驱动的,而不是由意识形态原因驱动的。我的测试数据文件的来源在野外

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


您可能无法像这样对结构进行建模。测试只能存在于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)
{
}
其中一个测试方法检查特定的内容,然后对每个文件运行该测试。在这种情况下,您只需删除属性并从新测试中调用此方法

我还感觉到,您希望您的测试以特定的顺序执行,而不同的测试运行者以不同的顺序执行您的测试。我不知道有什么方法可以做到这一点,一般来说,你不应该这样做。任何测试都不应依赖于另一个测试是否成功

假设你的测试有一定的时间密集性,如果早期的测试已经失败,你不想运行所有的后期测试,你可以考虑把它们放在适当的类别中,比如PrimeStime1等等。然后你可以一个接一个地执行一个类别,看看第一个失败的地方。


我希望这对您有所帮助。

您可能无法像这样对结构进行建模。测试只能存在于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)
{
}
其中一个测试方法检查特定的内容,然后对每个文件运行该测试。在这种情况下,您只需删除属性并从新测试中调用此方法

我还感觉到,您希望您的测试以特定的顺序执行,而不同的测试运行者以不同的顺序执行您的测试。我不知道有什么方法可以做到这一点,一般来说,你不应该这样做。任何测试都不应依赖于另一个测试是否成功

假设你的测试有一定的时间密集性,如果早期的测试已经失败,你不想运行所有的后期测试,你可以考虑把它们放在适当的类别中,比如PrimeStime1等等。然后你可以一个接一个地执行一个类别,看看第一个失败的地方。


我希望这对您有所帮助。

可以肯定,NUnit的GUI完全没有提供定制,或者充其量是非常有限的。测试GUI是你的敌人,而不是朋友:然而,你能做的是在测试完成后转换XML输出,然后将其转换成格式良好的HTML。我以前这样做是为了隐藏一些测试,更改它们的名称等等。顺便说一句,+MbUnit比NUnit好得多,我发誓@我将把这个迁移到StackOverflow。这个问题对Programmers.SE来说太客观了,你可能会有更好的机会得到答案。非常确定NUnit的GUI根本没有提供定制,或者充其量是非常有限的。测试GUI是你的敌人,而不是朋友:然而,你能做的是在测试完成后转换XML输出,然后将其转换成格式良好的HTML。我以前这样做是为了隐藏一些测试,改变它们
r名字等等。顺便说一句,+MbUnit比NUnit好得多,我发誓@我将把这个迁移到StackOverflow。这个问题对Programmers.SE来说太客观了,你可能会有更好的机会得到答案。