[英]How to make a Unit test with several data sources?
我有一个方法,我想用两个数据源(以我的情况为两个列表)进行测试。 有人可以帮忙解释一下如何做对吗? 我应该使用属性TestCaseSource以及如何使用吗?
public void TestMethodIntToBin(int intToConvert, string result)
{
Binary converter = new Binary();
string expectedResult = converter.ConvertTo(intToConvert);
Assert.AreEqual(expectedResult, result);
}
public List<int> ToConvert = new List<int>()
{
12,
13,
4,
64,
35,
76,
31,
84
};
public List<string> ResultList = new List<string>()
{
"00110110",
"00110110",
"00121011",
"00110110",
"00110110",
"00100110",
"00110110",
"00110110"
};
首先,您需要数据源是静态的。 那是NUnit 3的要求。
完成后,可以在每个参数上使用ValueSource属性 。 例如,
[Test, Sequential]
public void TestMethodIntToBin([ValueSource(nameof(ToConvert))] int intToConvert,
[ValueSource(nameof(ResultList))] string result)
{
// Asserts
}
Sequential属性指定您希望NUnit通过按顺序选择值来生成测试用例。 其他选项是Combinatorial(组合) ,它导致值的每种组合(默认值)或Pairwise(成对) ,仅为所有可能的对创建个案。
不过,根据您的情况,我建议将您的两个数据源合并为一个,并使用TestCaseSource属性 。
[TestCaseSource(nameof(Conversions))]
public void TestMethodIntToBin(int intToConvert, string result)
{
// Asserts
}
static object[] Conversions = {
new object[] { 12, "00110110" },
new object[] { 13, "00110110" }
}
请注意,我正在为C#6使用nameof()运算符。如果您没有使用Visual Studio 2015,则只需切换到字符串即可。
我似乎无法在该站点的注释中添加代码,因此即使它实际上是对Rob答案的注释,我也将其作为单独的答案发布。
在您的特定情况下,您根本不需要TestCaseSource ...请考虑以下事项:
[TestCase( 12, "00110110" )]
[TestCase( 13, "00110110" )]
public void TestMethodIntToBin(int intToConvert, string result)
{
// Asserts
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.