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

Har*_*ams 6 c# unit-testing mstest

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

[DataTestMethod]
[DataRow(
    new[] { "COM3", "COM1", "COM2" },
    new[] { "COM1", "COM2", "COM3" }
)]
...
public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Nko*_*osi 7

对于如此复杂的数据,改为使用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
    };
}
Run Code Online (Sandbox Code Playgroud)

参考 MSTest v2:数据测试