我有一些使用 TestCaseSource 函数的 NUnit 测试。不幸的是,我需要的 TestCaseSource 函数需要很长时间来初始化,因为它递归地扫描文件夹树以查找将传递给测试函数的所有测试图像。(或者,它可以在每次运行时从文件列表 XML 加载,但仍然需要自动发现新的图像文件。)
是否可以将 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 的更高版本。