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[]>,而您的 objectint[][],这就是你得到的。