如何在C#中用Nunit TestCase特性测试锯齿数组参数?
如何用锯齿数组创建NUnit测试用例
你的现有代码需要调整TestCaseSource的返回结构,因为NUnit要求TestCaseSource返回的是测试用例参数集合的数组,而不是直接返回锯齿数组本身。以下是正确的实现方式:
单测试用例(单个锯齿数组)
using NUnit.Framework; public class JaggedArrayTests { static public object[] JaggedValues() { int[][] jagged = new int[3][]; jagged[0] = new[] { 1, 1, 1, 0 }; jagged[1] = new[] { 0, 5, 0, 1 }; jagged[2] = new[] { 2, 1, 3, 10 }; // 将锯齿数组包装为单个测试用例的参数集合 return new object[] { jagged }; } // 测试方法参数类型与数据源匹配 [TestCaseSource(nameof(JaggedValues))] public void TestYourJaggedFunction(int[][] input) { // 在这里编写你的测试逻辑,比如调用待测试的功能方法并验证结果 // 示例: // var result = YourTargetClass.YourJaggedArrayMethod(input); // Assert.AreEqual(expectedOutput, result); } }
多测试用例(多个不同锯齿数组)
如果需要用多个锯齿数组作为测试用例,只需在返回的object[]中添加多个元素:
static public object[] MultipleJaggedValues() { // 第一个测试用例 int[][] case1 = new int[3][]; case1[0] = new[] { 1, 1, 1, 0 }; case1[1] = new[] { 0, 5, 0, 1 }; case1[2] = new[] { 2, 1, 3, 10 }; // 第二个测试用例 int[][] case2 = new int[2][]; case2[0] = new[] { 0, 0 }; case2[1] = new[] { 1, 2, 3 }; // 返回包含多个测试用例的数组 return new object[] { case1, case2 }; }
关键注意点
TestCaseSource的返回类型必须是object[],每个元素对应一个测试用例的参数列表(如果测试方法只有一个参数,元素就是该参数本身)。- 测试方法的参数类型必须和数据源中对应元素的类型严格匹配(这里是
int[][])。
内容的提问来源于stack exchange,提问作者Leonardo Sasso
相关产品推荐
相关产品推荐

