如何提供两个数组作为 DataRow 参数?
How to supply two arrays as DataRow parameters?
我正在尝试编写一个单元测试来比较两个数组。我这样定义单元测试:
[DataTestMethod]
[DataRow(
new[] { "COM3", "COM1", "COM2" },
new[] { "COM1", "COM2", "COM3" }
)]
...
public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts)
但是,我的 IDE 抛出以下错误:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
我试过使用外部变量,将数组定义为 new string[]
,用这些数组创建一个数组,但都没有成功。
如何将这两个数组用作单元测试的参数?
对于如此复杂的数据,改为使用 DynamicData
属性
This attribute allows to get the values of the parameters from a method or a property. The method or the property must return an IEnumerable<object[]>
. Each row corresponds to the values of a test.
[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(
new[] { "COM3", "COM1", "COM2" },
new object[] { new[] { "COM1", "COM2", "COM3" } }
)]
...
public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts)
请注意,如果您有任何其他第三个参数,它可以在没有解决方法的情况下工作。
我正在尝试编写一个单元测试来比较两个数组。我这样定义单元测试:
[DataTestMethod]
[DataRow(
new[] { "COM3", "COM1", "COM2" },
new[] { "COM1", "COM2", "COM3" }
)]
...
public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts)
但是,我的 IDE 抛出以下错误:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
我试过使用外部变量,将数组定义为 new string[]
,用这些数组创建一个数组,但都没有成功。
如何将这两个数组用作单元测试的参数?
对于如此复杂的数据,改为使用 DynamicData
属性
This attribute allows to get the values of the parameters from a method or a property. The method or the property must return an
IEnumerable<object[]>
. Each row corresponds to the values of a test.
[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(
new[] { "COM3", "COM1", "COM2" },
new object[] { new[] { "COM1", "COM2", "COM3" } }
)]
...
public void TestCOMPortSorting(string[] unorderedPorts, string[] expectedOrderedPorts)
请注意,如果您有任何其他第三个参数,它可以在没有解决方法的情况下工作。