You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:09:18