vam*_*one 5 c# testing unit-testing xunit
我的问题是如何在一个测试类中设置多个灯具?
但Zoo类的构造函数无法处理多个fixture.
举个例子:
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 );
}
}
Run Code Online (Sandbox Code Playgroud)
老虎班
public class Tiger : FixtureBase
{
public Tiger()
{
this.BonesCount = 4;
}
}
Run Code Online (Sandbox Code Playgroud)
鸟类
public class Bird: FixtureBase
{
public Bird()
{
this.BonesCount = 2;
}
}
Run Code Online (Sandbox Code Playgroud)
测试夹具基类
public class FixtureBase : IFixture
{
public int BonesCount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和界面
public interface IFixture
{
int BonesCount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
首先,让我们回想一下当我们想在xUnit中使用Class Fixtures时:
何时使用:当您想要创建单个测试上下文并在类中的所有测试之间共享它时,并在类中的所有测试完成后将其清理干净.
正如您所说,您希望重用从Zoo测试类到实现测试的方法.由于实现使用继承,为什么不为测试类使用继承呢?
public abstract class Zoo
{
protected IFixture 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)
{
Fixture = fixture;
}
}
public class TigerTests : Zoo, IClassFixture<Tiger>
{
public BirdTests(Tiger fixture)
{
Fixture = fixture;
}
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,我还没有真正了解您希望每次测试都能通过,因为您BonesCount在通用测试中硬编码为2.