我当前正在构建一个测试项目,我需要将多个参数传递给测试函数。因为我需要使用不同的参数集调用测试函数,所以我决定将 ms-test 与 [DataTestMethod] 一起使用。 现在我需要将锯齿状数组作为参数传递给函数。 但我无法让它发挥作用。 对 TestMethod1 的调用正在运行。 对 TestMethod2 的调用不起作用,因为它未成功编译。
CS0182: 属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式
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
。更多解释在这里:常量多维数组初始化
出于您的目的,我将使用 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[][]
,这就是你得到的。
在 DataRow 属性中传递交错数组的方法是将其放在数据行的输入列表的最后,并使用“params”作为测试方法的最后一个参数。
例如。我添加了一个新的布尔输入参数“anotherTestInput”,并最后传递了锯齿状数组参数“values”并使用了“params”关键字:
[DataTestMethod]
[DataRow(true, new[] { 3,2 }, new[] { 4,3,5 }, new[] { 4 })]
public void TestMethod2(bool anotherTestInput, params int[][] values)
{
...
}