我的测试方法如下所示:
public static List<Something> Generator() {
return A.GenerateObjects();
}
[Test, TestCaseSource(nameof(Generator))]
public void DoSomething(Something abc) {/*do something*/}
这段代码工作得很好,并为列表中的每个对象生成一个单元案例。
我想在方法中包含另一个参数,例如:
public void DoSomething(Something abc, string def)
我用这些行尝试过,但没有用:
public static object[] Case =
{
new object[]
{
A.GenerateObjects(),
someStrings
}
};
也许使用循环函数迭代列表而不是直接调用方法 (GenerateObjects())?我也不明白 Nunit 如何仅使用 TestCaseSource(nameof(Generator)) 直接识别列表中的对象
提前致谢!
您的初始测试采用一个类型为 的参数Something
。显然,A.GenerateObjects()
返回这些对象的某种 IEnumerable - 你没有显示细节。因为测试是一种单参数方法,所以有效。NUnit 为单参数方法提供了一种特殊情况,它非常宽容,将接受对象数组或所需类型的数组,并为您自己生成测试用例。
但是,对于多个参数,由您自己从您的方法返回一组测试用例。您可能知道,C# 中方法object[]
的参数采用包含参数的形式,例如new object[] { aSomething, "astring" }
.
假设您有需要与每个对象关联的特定字符串,则由您来进行关联。如何做到这一点取决于您要尝试执行的操作的详细信息。
您是否有一个字符串列表,希望将其与对象列表一对一关联?在这种情况下,停止使用[TestCaseSource]
和使用[ValueSource]
或[Values]
测试方法的每个参数。应用于[Sequential]
方法使 NUnit 将对象和字符串一一匹配。这是一个例子...
[Test, Sequential]
public void DoSomething(
[ValueSource(typeof(A), nameof(GetObjects)] Something abc,
[Values("string1", "string2", "string3")] string def)
{/*do something*/}
这只是一种方法。我不得不对您有哪些现成的数据以及您正在尝试做什么进行了大量猜测。如果这种方法对您不起作用,请填写一些空白,我将编辑答案。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句