Xunit 多个 IClassFixtures

2024-03-24

我的问题是如何在一个测试类中设置多个装置?

但是Zoo类的构造函数不能处理多个灯具。

例如:

public class Zoo : IClassFixture<Tiger>, IClassFixture<Wolf>, IClassFixure<Bird>
{
   private IFixture fixture;
   public Zoo(IFixture fixture) 
   { 
    this.fixture = fixture; 
   }

   [Fact]
   public void TestAnimal()
   {
    //Arrange 
    int actualBonesCount = this.fixture.BonesCount;
    int expectedBonesCount = 2;

    //Act & Assert
    Assert.Equal(expectedBonesCount, actualBonesCount );
   }
} 

虎类

public class Tiger : FixtureBase
{
   public Tiger()
   {
    this.BonesCount  = 4;
   }
}

鸟类

public class Bird: FixtureBase
{
   public Bird()
   {
    this.BonesCount  = 2;
   }
}

测试夹具基类

public class FixtureBase : IFixture
{
   public int BonesCount { get; set; }
}

及接口

public interface IFixture
{
   int BonesCount { get; set; }
}

首先,让我们回想一下什么时候我们要使用班级赛程在 x 单元中:

何时使用:当您想要创建单个测试上下文并在类中的所有测试之间共享它,并在类中的所有测试完成后清理它时。

正如您所说,您想重用以下方法Zoo测试类到实施测试。既然实现使用继承,为什么测试类不也使用继承呢?

public abstract class Zoo
{
    protected readonly IFixture Fixture;

    protected Zoo(IFixture fixture)
    {
       Fixture = fixture;
    }

    [Fact]
    public void TestAnimal()
    {
        //Arrange 
        int actualBonesCount = Fixture.BonesCount;
        int expectedBonesCount = 2;

        //Act & Assert
        Assert.Equal(expectedBonesCount, actualBonesCount);
    }
}

public class BirdTests : Zoo, IClassFixture<Bird>
{
    public BirdTests(Bird fixture)
       : base(fixture)
    {
    }
}

public class TigerTests : Zoo, IClassFixture<Tiger>
{
    public BirdTests(Tiger fixture)
       : base(fixture)
    {
    }
}

不过,我真的不明白你希望如何通过硬编码的每个测试BonesCount在一般测试中为 2。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xunit 多个 IClassFixtures 的相关文章

随机推荐