如何在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
相关产品推荐
相关产品推荐

