C# 使用多维数组作为 DataRow (MSTest) 的输入

问题描述 投票:0回答:2

我当前正在构建一个测试项目,我需要将多个参数传递给测试函数。因为我需要使用不同的参数集调用测试函数,所以我决定将 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 关键字,因为我需要在测试函数中使用两个锯齿状数组。

问候 白色

c# arrays arguments mstest
2个回答
1
投票

不能使用交错数组作为属性中的参数,因为不能将其声明为

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


0
投票

在 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)
        {
            ...
        }
© www.soinside.com 2019 - 2024. All rights reserved.