【问题标题】:How to avoid duplicate TestFixtures arrangements for every test?如何避免每次测试重复的 TestFixtures 安排?
【发布时间】:2019-10-25 13:59:21
【问题描述】:

我有许多测试都安排了一些TestFixtures,我发现我正在复制该安排代码很多。每个测试的前几行几乎相同。

有没有办法在所有测试之间声明一个共享的 TestFixture,同时在每个测试之间“重置”它们,从而保持测试独立性?

public class MyClassTests
{
    private readonly Mock<ICoolService> _mockCoolService;
    private readonly Mock<IGreatService> _mockGreatService;
    private readonly Mock<INiceService> _mockNiceService;
    private readonly MyClass _controller;

    public MyClassTests(){

        //initialize the services.

        _controller = new MyClass(_mockCoolService.Object, _mockGreatService.Object, _mockNiceService.Object);
    }

    [Fact]
    public async Task MyTest_ShouldDoThis(){
        var batchName = TestFixture.Create<string>();
        var documentName = TestFixture.Create<string>();
        var controlId = TestFixture.Create<int>();

        _mockCoolService.Setup(x=>x.ACoolMethod(batchName, documentName)).Returns(batchName)

        var result = _controller.DoThis()

        //VerifyAll
    }

    [Fact]
    public async Task MyTest_ShouldDoThat(){
        var batchName = TestFixture.Create<string>();
        var documentName = TestFixture.Create<string>();
        var controlId = TestFixture.Create<int>();

        _mockGreatService.Setup(x=>x.AGreatMethod(batchName, documentName)).Returns(batchName)

        var result = _controller.DoThat()

        //VerifyAll
    }

    [Fact]
    public async Task MyTest_ShouldDoAnotherThing(){
        var batchName = TestFixture.Create<string>();
        var documentName = TestFixture.Create<string>();
        var controlId = TestFixture.Create<int>();

        _mockNiceService.Setup(x=>x.ANiceMethod(batchName, documentName)).Returns(batchName)

        var result = _controller.DoAnotherThing()

        //VerifyAll
    }
}

【问题讨论】:

  • 把它们放在构造函数中?

标签: c# unit-testing moq xunit.net autofixture


【解决方案1】:

xUnit 文档建议将这样的代码放入构造函数中:

xUnit.net 为每个测试创建一个新的测试类实例 运行,因此任何放入测试构造函数的代码 将为每个测试运行类。

xUnit documentation: Shared context between tests

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多