Как избежать дублирования расположения TestFixtures для каждого теста? - PullRequest
2 голосов
/ 25 октября 2019

У меня есть несколько тестов, которые все устраивают некоторые TestFixtures, и я обнаружил, что я дублирую этот код расположения на lot . Первые несколько строк каждого теста почти идентичны.

Есть ли способ объявить один общий 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
    }
}

1 Ответ

2 голосов
/ 25 октября 2019

Документация xUnit предлагает поместить в конструктор следующий код:

xUnit.net создает новый экземпляр класса test для каждого запускаемого теста, поэтому любой код, помещаемый вКонструктор класса теста будет запускаться для каждого отдельного теста.

xUnit документация: общий контекст между тестами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...