Xunit 多个 IClassFixtures [英] Xunit multiple IClassFixtures
问题描述
我的问题是如何在一个测试类中设置多个夹具?
My question is How to setup multiple fixtures in one test class?
但是Zoo类的构造函数不能处理多个fixtures.
But the constructor of Zoo class can not handle multiple fixtures.
例如:
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; }
}
推荐答案
首先,让我们回想一下我们在 xUnit 中何时要使用 Class Fixtures :
First of all, let's recall when we want to use Class Fixtures in xUnit:
何时使用:当您想要创建单个测试上下文并在类中的所有测试之间共享它时,并在类中的所有测试完成后将其清理干净.
When to use: when you want to create a single test context and share it among all the tests in the class, and have it cleaned up after all the tests in the class have finished.
正如您所说,您希望将 Zoo
测试类中的方法重用于实现测试.既然实现使用了继承,那为什么测试类也不要使用继承呢?
As you've said, you'd like to reuse methods from Zoo
test class to implementation tests. Since implementations use inheritance, why not use inheritance for test classes too?
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;
}
}
不过,由于您在通用测试中将 BonesCount
硬编码为 2,我仍然不知道您希望每个测试如何通过.
Still, I don't really get how would you like for each test to pass as you've hardcoded BonesCount
to 2 in a generic test.
这篇关于Xunit 多个 IClassFixtures的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!