是否可以设置使用TestCaseSource运行的所有测试的名称?

时间:2019-06-11 04:24:36

标签: c# nunit

我有100个使用TestCaseSource属性运行的测试用例。这些测试被分为各种IEnumerable<TestCaseData>结构,并针对同一测试运行。对于IEnumerable<TestCaseData>中的每个测试,我都想出一个很好的方法来拥有相同的测试名称。

我不想在每个SetName上都打TestCaseData。到目前为止,我想到的最好的方法是使测试与TestCaseData集的比例为1:1,并使每个测试用例都继承测试名称。但是,这会导致重复代码很多,因为测试执行相同的操作,只是数据发生了变化。

我目前拥有的是:

public static class TestCases
{
    public static IEnumerable<TestCaseData> SingleOperations
    {
        get
        {
            yield return new TestCaseData("", "").Returns(0);
            // 100s of more test cases.
        }
    }

    public static IEnumerable<TestCaseData> MultipleOperations
    {
        get
        {
            yield return new TestCaseData("", "").Returns(0);
            // 100s of more test cases.
        }
    }

    // Multiple more sets of IEnumerable<TestCaseData>.
}
[TestFixture]
public class LevenshteinTests
{
    [TestCaseSource(typeof(TestCases), nameof(TestCases.SingleOperations))]
    public int Foo_Bar_SingleOperations(string a, string b)
    {
        return Foo.Bar(a, b);
    }

    [TestCaseSource(typeof(TestCases), nameof(TestCases.MultipleOperations))]
    public int Foo_Bar_MultipleOperations(string a, string b)
    {
        return Foo.Bar(a, b);
    }

    // Multiple more tests that do the same thing.
}

有什么方法可以实现以下目标?

[TestFixture]
public class LevenshteinTests
{
    [TestCaseSource(typeof(TestCases), nameof(TestCases.SingleOperations))]
    [TestCaseSource(typeof(TestCases), nameof(TestCases.MultipleOperations))]
    // Multiple more sets of TestCaseSource.
    public int Foo_Bar_Operations(string a, string b)
    {
        return Foo.Bar(a, b);
    }
}

在哪里可以轻松地在每个TestCaseSource的所有测试用例中添加一个单独的名称?

0 个答案:

没有答案