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

如何在NUnit中调用含多个参数的测试方法

解决NUnit多参数测试用例的问题

嘿,我明白你遇到的问题了——原来单参数的TestCaseSource用得好好的,加了第二个参数之后就卡壳了对吧?其实核心就是NUnit要求多参数测试的用例源返回的每个元素,必须是能匹配参数数量的对象数组,我给你两种可行的方案:

方案一:修改原Generator方法返回多参数数组

把原来返回List<Something>的Generator改成返回IEnumerable<object[]>,每个数组里包含Something实例和对应的string参数,代码示例如下:

public static IEnumerable<object[]> Generator()
{
    // 先获取原来的Something列表
    var somethings = A.GenerateObjects();
    // 为每个Something搭配对应的string参数(这里可以根据你的需求自定义,比如用对象属性、固定值或随机值)
    foreach (var something in somethings)
    {
        yield return new object[] { something, $"针对{something.Name}的测试字符串" };
    }
}

[Test, TestCaseSource(nameof(Generator))]
public void DoSomething(Something abc, string def)
{
    // 你的测试逻辑
}

方案二:用静态数组作为测试用例源

如果你想用之前尝试的静态数组方式,要确保数组里的每个元素都是包含两个参数的子数组,比如:

// 每个子数组对应一组测试参数:第一个是Something实例,第二个是string
public static object[] TestCases = 
{
    new object[] { A.GenerateSampleObject(), "测试场景1" },
    new object[] { A.GenerateAnotherSample(), "测试场景2" },
    // 可以继续添加更多测试用例
};

[Test, TestCaseSource(nameof(TestCases))]
public void DoSomething(Something abc, string def)
{
    // 测试逻辑
}

为什么之前的尝试失败?

大概率是你之前的Case数组里的元素不是包含两个元素的object[]——比如直接放了Something实例,或者只传了单个参数,NUnit没法把单个值映射到两个参数的测试方法上,所以才会失败。只要保证每个测试用例元素是对应参数数量的数组,就能正常运行啦!

内容的提问来源于stack exchange,提问作者B0r1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:03:19