繁体   English   中英

如何使用多个数据源进行单元测试?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM