2011-04-29 116 views
5

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

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

需要获取存储在文件夹中的所有测试图像是项目需求,因为无法访问测试项目的其他人需要将新测试图像添加到文件夹,而无需修改测试项目的源代码码。他们将能够查看测试结果。

一些教条式的单元测试人员可能会反驳说我正在使用NUnit来做它不应该做的事情。我不得不承认,我必须满足一个要求,NUnit是一个非常棒的GUI工具,可以满足我的大部分要求,所以我不在乎它是否适合进行单元测试。

其他信息(从NUnit的文档)上的对象施工

NUnit的定位在 时间的考验加载测试的情况下,创建每个类的 实例与 非 - 静态资源并建立一个要执行的测试列表 。每个源 对象仅在此 时间创建一次,并在加载所有测试 后销毁。

如果数据源是在测试夹具 本身,该目的是如果没有指定参数 使用适当构造函数 或设置在 TestFixtureAttribute夹具参数的默认 构造函数创建 。由于此对象在测试运行之前销毁了 ,所以在 这两个阶段之间或在 不同运行之间没有 通信,但通过 参数本身除外。

看起来,预先加载测试用例的目的是为了避免TestCaseSource和测试执行之间的通信(或副作用)。这是真的?这是要求测试用例被加载的唯一原因吗?

注:

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

有计划地引进此选项更高版本的NUnit。

回答

0

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