为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
翻过高山走不出你 2021-11-28 18:46:26
我使用 XUnit 在 C# 代码中运行单元测试。我有许多抽象的单元测试类,它们采用一个标准的额外相当复杂的参数(与标准的 XUnit 测试类设置相比)。该参数的值来自某个静态列表(为简单起见)。我需要为该列表中参数的所有可能值运行所有相关的单元测试类,并且没有重复的样板代码。从某种意义上说,这等效于TheoryData,但应用于测试类级别而不是方法级别。在当前的 XUnit 框架内这可能吗?如果是,那么具体如何?
查看完整描述

2 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

您可以使用 IClassFixture。创建自定义的 TFixture 以将数据返回到您的测试类构造函数。


namespace Xunit

{

    public interface IClassFixture<TFixture> where TFixture : class

    {

    }

}

并且您的方法应该继承自定义装置


public class ParameterizedTests: IClassFixture<TFixture>

{

    public ParameterizedTests(TFixture fixture)

    {

    }


    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));

    }

}


查看完整回答
反对 回复 2021-11-28
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超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));

    }

}


查看完整回答
反对 回复 2021-11-28
  • 2 回答
  • 0 关注
  • 208 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信