为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
呼如林 2023-09-16 15:18:33
我正在尝试编写一个比较两个数组的单元测试。我将单元测试定义如下:[DataTestMethod][DataRow(    new[] { "COM3", "COM1", "COM2" },    new[] { "COM1", "COM2", "COM3" })]...public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts)但是,我的 IDE 抛出以下错误:属性参数必须是属性参数类型的常量表达式、typeof 表达式或数组创建表达式我尝试过使用外部变量,将数组定义为new string[],用这些数组创建单个数组,但都没有成功。如何使用这两个数组作为单元测试的参数?
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超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

    };

}


查看完整回答
反对 回复 2023-09-16
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

DataRowAttribute可以处理简单类型的数组。这里的问题是,DataRowAttribute多个参数具有以下重载:DataRowAttribute(object data1, params object[] moreData)。


在你的表达式中,我认为 C# 将第二个字符串数组作为 ,object[] moreData但它不喜欢它。如果显式指定params object[]参数,它将按预期采用第二个字符串数组。


[DataTestMethod]

[DataRow(

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

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

)]

...

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

请注意,如果您有任何其他第三个参数,则无需解决方法即可工作。


查看完整回答
反对 回复 2023-09-16
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信