C# 使用多维数组作为 DataRow (MSTest) 的输入
C# using multi dim array as input for DataRow (MSTest)
我目前正在构建一个测试项目,我需要将几个参数传递给测试函数。因为我需要使用不同的参数集调用测试函数,所以我决定将 ms-test 与 [DataTestMethod] 一起使用。
现在我需要将锯齿状数组作为参数传递给函数。
但我不让它工作。
对 TestMethod1 的调用正在运行。
由于未成功编译,对 TestMethod2 的调用不起作用。
CS0182:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject2
{
[TestClass]
public class UnitTest1
{
[DataTestMethod]
[DataRow(new int[] { })]
public void TestMethod1(int[] values)
{
}
[DataTestMethod]
[DataRow(new int [][] { } )]
public void TestMethod2(int[][] values)
{
}
}
}
有没有人有任何建议让这个工作?
遗憾的是,我需要使用某种二维数据类型,因为我需要在测试函数内部传递有关两个循环的信息。我不能使用 params 关键字,因为我在测试函数中需要两个这样的锯齿状数组。
问候
白色
您不能将交错数组用作属性中的参数,因为您不能将其声明为 const
。更多解释在这里:Const multi-dimensional array initialization
为了您的目的,我会使用 DynamicDataAttribute:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
namespace UnitTestProject
{
[TestClass]
public class TestClass
{
static IEnumerable<int[][][]> GetJaggedArray
{
get
{
return new List<int[][][]>
{
new int[][][]
{
new int [][]
{
new int[] { 1 },
new int[] { 2, 3, 4 },
new int[] { 5, 6 }
}
}
};
}
}
[TestMethod]
[DynamicData(nameof(GetJaggedArray))]
public void Test1(int[][] jaggedArray)
{
Assert.AreEqual(1, jaggedArray[0][0]);
Assert.AreEqual(2, jaggedArray[1][0]);
Assert.AreEqual(3, jaggedArray[1][1]);
Assert.AreEqual(4, jaggedArray[1][2]);
Assert.AreEqual(5, jaggedArray[2][0]);
Assert.AreEqual(6, jaggedArray[2][1]);
}
}
}
我知道语法 IEnumerable<int[][][]>
不好看,但是由于 DynamicDataAttribute.GetData(MethodInfo) 方法返回 IEnumerable<object[]>
,而您的 object
是 int[][]
,这就是你得到的。
我目前正在构建一个测试项目,我需要将几个参数传递给测试函数。因为我需要使用不同的参数集调用测试函数,所以我决定将 ms-test 与 [DataTestMethod] 一起使用。 现在我需要将锯齿状数组作为参数传递给函数。 但我不让它工作。 对 TestMethod1 的调用正在运行。 由于未成功编译,对 TestMethod2 的调用不起作用。
CS0182: An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace UnitTestProject2
{
[TestClass]
public class UnitTest1
{
[DataTestMethod]
[DataRow(new int[] { })]
public void TestMethod1(int[] values)
{
}
[DataTestMethod]
[DataRow(new int [][] { } )]
public void TestMethod2(int[][] values)
{
}
}
}
有没有人有任何建议让这个工作? 遗憾的是,我需要使用某种二维数据类型,因为我需要在测试函数内部传递有关两个循环的信息。我不能使用 params 关键字,因为我在测试函数中需要两个这样的锯齿状数组。
问候 白色
您不能将交错数组用作属性中的参数,因为您不能将其声明为 const
。更多解释在这里:Const multi-dimensional array initialization
为了您的目的,我会使用 DynamicDataAttribute:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
namespace UnitTestProject
{
[TestClass]
public class TestClass
{
static IEnumerable<int[][][]> GetJaggedArray
{
get
{
return new List<int[][][]>
{
new int[][][]
{
new int [][]
{
new int[] { 1 },
new int[] { 2, 3, 4 },
new int[] { 5, 6 }
}
}
};
}
}
[TestMethod]
[DynamicData(nameof(GetJaggedArray))]
public void Test1(int[][] jaggedArray)
{
Assert.AreEqual(1, jaggedArray[0][0]);
Assert.AreEqual(2, jaggedArray[1][0]);
Assert.AreEqual(3, jaggedArray[1][1]);
Assert.AreEqual(4, jaggedArray[1][2]);
Assert.AreEqual(5, jaggedArray[2][0]);
Assert.AreEqual(6, jaggedArray[2][1]);
}
}
}
我知道语法 IEnumerable<int[][][]>
不好看,但是由于 DynamicDataAttribute.GetData(MethodInfo) 方法返回 IEnumerable<object[]>
,而您的 object
是 int[][]
,这就是你得到的。