NUnit 3.13.3中如何在TestCaseSource中使用params参数?
NUnit 3.13.3测试参数匹配异常解决
问题场景
在NUnit 3.13.3版本下编写了如下测试方法:
[TestCaseSource(nameof(_myTestMethodCases))] public void MyTestMethod(string text, int number, params Cat[] cats) { foreach(var cat in cats) { // Do stuff } // Do other stuff // Assert }
对应的测试用例字段:
private static object[] _myTestMethodCases { new object[] { "testA", 10, new Cat("Lua"), new Cat("Julia") } new object[] { "testB", 20 } new object[] { "testC", 20, new Cat("Ruby") } }
运行测试时所有用例均抛出异常:Not enough arguments provided, provide at least 3 arguments.
需解决:除将TestCaseSource改为方法外,如何修复该问题?
解决步骤
1. 修复测试用例的语法错误
原测试用例字段的数组元素间缺少逗号,且未完成字段赋值,先修正语法:
private static object[] _myTestMethodCases = { new object[] { "testA", 10, new Cat("Lua"), new Cat("Julia") }, new object[] { "testB", 20 }, new object[] { "testC", 20, new Cat("Ruby") } };
2. 显式适配params参数的传递逻辑
NUnit的TestCaseSource不会自动将零散参数打包为params数组,也不会在无对应参数时自动传入空数组。需手动将cats参数包装为数组传入:
- 多
Cat实例的用例:把所有Cat放到一个Cat[]数组中作为第三个参数 - 无
Cat的用例:显式传入空Cat[]数组或null
修改后的测试用例:
private static object[] _myTestMethodCases = { new object[] { "testA", 10, new Cat[] { new Cat("Lua"), new Cat("Julia") } }, new object[] { "testB", 20, new Cat[0] }, new object[] { "testC", 20, new Cat[] { new Cat("Ruby") } } };
完成以上修改后,测试用例即可正确匹配方法参数,不再抛出参数不足的异常。
内容的提问来源于stack exchange,提问作者Kacper Wyczawski
相关产品推荐
相关产品推荐

