NUnit测试报错:参数过多,如何将字符串数组作为单个参数传入?
解决NUnit中字符串数组作为测试数据被拆分的问题
问题原因
NUnit的TestCaseData构造函数默认会将传入的数组拆解为多个独立参数,而你的测试方法CheckRoles只接受一个string[]类型的参数,因此触发了"Too many arguments provided, provide at most 1 arguments"的错误。
解决方案
需要将读取到的字符串数组包装在一个object[]中,明确告诉NUnit把它当作单个参数传入测试方法,而非拆分数组元素。
修正后的RolesData方法代码:
public static IEnumerable<TestCaseData> RolesData() { // 将字符串数组包装进object数组,避免被NUnit拆解 yield return new TestCaseData(new object[] { GetDataParser().ExtractDataArray("name") }); }
完整可运行代码示例
测试方法保持原有逻辑即可:
[Test, TestCaseSource(nameof(RolesData))] public void CheckRoles(string[] rolesData) { foreach (var role in rolesData) { Console.WriteLine(role); } }
数据提取方法无需修改:
public String[] ExtractDataArray(String tokenName) { String myJsonString = File.ReadAllText("../../../Test Data/Login.json"); var jsonObject = JToken.Parse(myJsonString); List<String> roleList = jsonObject.SelectTokens(tokenName).Values<String>().ToList(); return roleList.ToArray(); }
为什么之前的尝试无效
你之前的代码new[] { "name" }只是创建了一个包含单个字符串"name"的数组,并没有把从JSON中读取到的角色数组包装起来,因此无法解决参数被拆分的核心问题。
内容的提问来源于stack exchange,提问作者Aidan
相关产品推荐
相关产品推荐

