我正在使用NUnit 3执行我的测试用例。这里 ContextualTestData成为我的测试数据读取器,并将其传递给测试用例 `
public class ContextualTestData<T> where T : class
{
public static T[] ExtractData()
{
// Read xml data and serialize then return
}
}
` 现在我有3个测试用例,引用了这个(ContextualTestData)通用方法来检索数据
[Test, TestCaseSource(typeof(ContextualTestData<Shipping>), nameof(ContextualTestData<Shipping>.ExtractData))]
public void Should_ExecuteShippingInformationOnce(Shipping shipping)
{
// Arrange
// Act
Execute(shipping)
// Assert
}
与上述订单和销售类似。
在执行这些测试用例之一的测试用例期间,nunit触发ContextualTestData类3次,而不是触发3次,即执行装运测试用例时,它将首先触发Order,然后进行销售,最后进行装运,然后将装运数据传递给交付测试用例,尽管前两个执行不触发其各自的测试用例,但随后却浪费了执行。无论如何,是否将ContextualTestData w.r.t的执行限制为当前正在执行的测试用例。
答案 0 :(得分:0)
NUnit首先发现(即构造)测试用例,然后执行它们。您的TestCaseSource
参与了案例的构建。
测试用例的过滤非常普遍。它可以对测试用例的测试名称,类别或属性进行操作。因此,为了起作用,必须首先构造所有情况。因此,建议您不要使用TestCaseSource
方法执行资源密集型工作。
有两种方法可以解决您的问题,甚至可以将它们一起使用...
NUnit 3.11版本将包含使用预过滤的功能。预过滤在发现测试之前进行,并且仅限于选择要包含的特定名称空间,类或方法。其他类和方法将被忽略。不幸的是,该功能尚未发布,仅在使用NUnitLite时可用。已计划为控制台运行程序和vs适配器实施。
最小化测试用例源正在完成的工作。您可以通过不序列化TestCaseSource
中的XML数据来实现。取而代之的是,只需检索单个数据项(它们要么需要在单独的文件中,要么至少需要在单个文件中的单独行中,然后将其作为字符串传递给测试。让您的测试调用一种解释数据的方法。 / p>