在NUnit中延迟加载TestCaseSource

时间:2011-04-29 05:07:00

标签: nunit delay-load testcasesource

我有一些使用TestCaseSource函数的NUnit测试。不幸的是,我需要的TestCaseSource函数需要很长时间才能初始化,因为它以递归方式扫描文件夹树以查找将传递给测试函数的所有测试图像。 (或者,它可以在每次运行时从文件列表XML加载,但仍然需要自动发现新的图像文件。)

是否可以与TestCaseSource一起指定NUnit属性,以便NUnit不会枚举测试用例(不调用TestCaseSource函数),直到用户点击节点或者直到运行测试套件? / p>

需要将所有测试图像存储在文件夹中是一项项目要求,因为其他无权访问测试项目的人需要将新的测试图像添加到文件夹中,而无需修改测试项目的源代码。然后他们就可以查看测试结果了。

一些教条主义的单位​​测试者可能会反驳说我正在使用NUnit做一些不应该做的事情。我必须承认我必须满足一个要求,NUnit是一个很棒的工具,有一个很好的GUI,可以满足我的大部分要求,所以我不关心它是否是正确的单元测试。

其他信息(来自NUnit文档)

  

关于对象构造的注释

     

NUnit将测试用例定位于   加载测试的时间,创建   每个类的实例   非静态源并构建列表   要执行的测试。每个来源   对象仅在此处创建一次   时间并在所有测试后被销毁   装了。

     

如果数据源在测试中   夹具本身,创建对象   使用适当的构造函数   提供的夹具参数   TestFixtureAttribute或默认值   构造函数,如果没有参数   指定。因为这个对象是   在测试运行之前销毁,没有   之间可以进行沟通   这两个阶段 - 或之间   不同的运行 - 除了通过   参数本身。

预先加载测试用例的目的似乎是避免TestCaseSource与测试执行之间的通信(或副作用)。这是真的?这是要求预先加载测试用例的唯一原因吗?

注意:

需要修改NUnit,如http://blog.sponholtz.com/2012/02/late-binded-parameterized-tests-in.html

中所述

有计划将此选项引入更高版本的NUnit。

1 个答案:

答案 0 :(得分:0)

我不知道在GUI中延迟加载测试名称的方法。我的建议是将这些测试移到单独的程序集中。这样,您可以快速运行所有其他测试,并仅在需要时加载较慢的详尽测试。