Xunit 多个 IClassFixtures [英] Xunit multiple IClassFixtures

查看:35
本文介绍了Xunit 多个 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆