类级别的 XUnit 理论类数据,而非方法

Kon*_*nov 6 c# xunit xunit.net

  1. 我使用 XUnit 在 C# 代码中运行单元测试。
  2. 我有许多抽象的单元测试类,它们采用一个标准的额外相当复杂的参数(与标准的 XUnit 测试类设置相比)。
  3. 该参数的值来自一些静态列表(为简单起见)。
  4. 我需要为该列表中参数的所有可能值运行所有相关的单元测试类,并且没有重复的样板代码

从某种意义上说,这等效于TheoryData,但应用于测试类级别而不是方法级别。在当前的 XUnit 框架内这可能吗?如果是,那么具体如何?

Ywa*_*pom 3

您可以使用此处提到的 ClassData 来完成此操作

您创建如下所示的某种 Generator 类,并将 ClassData 夹具与 Theory 结合使用。

public class TestDataGenerator : IEnumerable<object[]>
{
    private readonly List<object[]> _data = new List<object[]>
    {
        new object[] {5, 1, 3, 9},
        new object[] {7, 1, 5, 3}
    };

    public IEnumerator<object[]> GetEnumerator() => _data.GetEnumerator();

    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
}

public class ParameterizedTests
{
    public bool IsOddNumber(int number)
    {
        return number % 2 != 0;
    }

    [Theory]
    [ClassData(typeof(TestDataGenerator))]
    public void AllNumbers_AreOdd_WithClassData(int a, int b, int c, int d)
    {
        Assert.True(IsOddNumber(a));
        Assert.True(IsOddNumber(b));
        Assert.True(IsOddNumber(c));
        Assert.True(IsOddNumber(d));
    }
}
Run Code Online (Sandbox Code Playgroud)