【问题标题】:How can I pass property as parameter in MSTest DataRow如何在 MSTest DataRow 中将属性作为参数传递
【发布时间】:2017-11-15 01:50:54
【问题描述】:
我在使用 MSTest 的单元测试中有一个 DataTestMethod,我的构造函数中有一个字符串属性,假设我有以下代码:
[DataTestMethod]
[DataRow("test")]
[DataRow(stringproperty)] // How is this?
public void TestMethod(string test) {
Assert.AreEqual("test", test);
}
是否可以在 DataRow 中将属性作为参数传递?
谢谢。
【问题讨论】:
标签:
c#
unit-testing
mstest
【解决方案1】:
是的,如果你使用 DynamicDataAttribute
[DynamicData("TestMethodInput")]
[DataTestMethod]
public void TestMethod(string test)
{
Assert.AreEqual("test", test);
}
public static IEnumerable<object[]> TestMethodInput
{
get
{
return new[]
{
new object[] { stringproperty },
new object[] { "test" }
};
}
}
【解决方案2】:
Try this
private List<string> testData=new List<string>();
testData.Add("test");
testData.Add("test1");
private IEnumerable<object[]> ListOfTestData =>
new List<string[]>
{
new[] {testData[0]},
new[] {testData[1]}
};
[DataTestMethod]
[DynamicData (nameof (ListOfTestData))]
public void TestMethod(string test)
{
Assert.AreEqual("test", test);
}
Source: https://dev.to/frannsoft/mstest-v2---new-old-kid-on-the-block
【解决方案3】:
作为改进,使用
[DynamicData(nameof(TestMethodInput))]
而不是[DynamicData("TestMethodInput")]。
稍后在 C# 中引入 nameof 关键字可确保遵循所有重命名重构,并在编译时捕获命名错误。