如何提供两个数组作为 DataRow 参数?

我正在尝试编写一个比较两个数组的单元测试。我将单元测试定义如下:


[DataTestMethod]

[DataRow(

    new[] { "COM3", "COM1", "COM2" },

    new[] { "COM1", "COM2", "COM3" }

)]

...

public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts)

但是,我的 IDE 抛出以下错误:


属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式


我尝试过使用外部变量,将数组定义为new string[],用这些数组创建单个数组,但都没有成功。


如何使用这两个数组作为单元测试的参数?


呼如林
浏览 111回答 2
2回答

一只斗牛犬

对于如此复杂的数据,改为使用DynamicData属性该属性允许从方法或属性获取参数值。该方法或属性必须返回一个IEnumerable<object[]>. 每行对应于测试的值。[DataTestMethod][DynamicData(nameof(TestDataMethod), DynamicDataSourceType.Method)]public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts) {    //...}static IEnumerable<object[]> TestDataMethod() {    return new[] {        new []{ new[] { "COM3", "COM1", "COM2" }, new[] { "COM1", "COM2", "COM3" } } //a data row    };}

繁星点点滴滴

DataRowAttribute可以处理简单类型的数组。这里的问题是,DataRowAttribute多个参数具有以下重载:DataRowAttribute(object data1, params object[] moreData)。在你的表达式中,我认为 C# 将第二个字符串数组作为 ,object[] moreData但它不喜欢它。如果显式指定params object[]参数,它将按预期采用第二个字符串数组。[DataTestMethod][DataRow(&nbsp; &nbsp; new[] { "COM3", "COM1", "COM2" },&nbsp; &nbsp; new object[] { new[] { "COM1", "COM2", "COM3" } })]...public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts)请注意,如果您有任何其他第三个参数,则无需解决方法即可工作。
打开App,查看更多内容
随时随地看视频慕课网APP