我们如何在List<string>
中将DataRow
传递给[DataTestMethod]
参数
我正在尝试类似的事情:
[DataTestMethod]
[DataRow(new List<string>() {"Iteam1"})]
[TestCategory(TestCategories.UnitTest)]
public void MyTest(IEnumerable<string> myStrings)
{
// ...
}
我收到一个编译错误:
属性参数必须是常量表达式,typeof表达式 参数类型的数组或数组创建表达式
甚至可以像这样传递列表吗?
答案 0 :(得分:2)
如错误消息所述,您不能在属性中使用List
,但是可以使用数组。
[DataTestMethod]
[DataRow(new string[] { "Item1" })]
[TestCategory(TestCategories.UnitTest)]
public void MyTest(string[] myStrings)
{
// ...
}
要真正使用List
或任何其他类型,可以使用DynamicDataAttribute
。
[DataTestMethod]
[DynamicData(nameof(GetTestData), DynamicDataSourceType.Method)]
[TestCategory(TestCategories.UnitTest)]
public void MyTest(IEnumerable<string> myStrings)
{
// ...
}
public static IEnumerable<object[]> GetTestData()
{
yield return new object[] { new List<string>() { "Item1" } };
}
赋予DynamicDataAttribute
的方法或属性必须返回IEnumerable
对象数组。这些对象数组表示要传递给测试方法的参数。
如果列表中始终有固定数量的项目,则可以避免完全使用列表
[DataTestMethod]
[DataRow("Item1", "Item2")]
[TestCategory(TestCategories.UnitTest)]
public void MyTest(string string1, string string2)
{
// ...
}
答案 1 :(得分:0)
我发现了另一种很酷的方法来处理数组! :)
MS测试中的DataRow
允许您传递params
参数。这些将传递到测试方法签名中的数组。
[TestMethod]
[DataRow(true, "")]
[DataRow(true, "", "")]
[DataRow(true, "", "", "0")]
[DataRow(true, "", "", "", "1")]
[DataRow(true, "", "1", "", "0", "")]
[DataRow(false, "1")]
[DataRow(false, "", "1")]
[DataRow(false, "", "", "1")]
[DataRow(false, "", "", "1", "1")]
[DataRow(false, "1", "1", "1", "1")]
public void IsSparseRow(bool expected, params string[] row)
{
// Arrange
// Act
var actual = ExcelFileHelpers.IsSparseRow(row);
// Assert
Assert.AreEqual(expected, actual);
}