Как настроить тесты ServiceStack xUnit для нескольких сервисов одновременно? - PullRequest
0 голосов
/ 14 сентября 2018

как вы, ребята, тестируете несколько сервисов одновременно, используя ServiceStack и xUnit?У меня есть TestSetup, который работает нормально, и я наследую его с помощью тестовых классов, таких как:

public class TestSetup : IDisposable
{
protected ServiceStackHost appHost;

 public TestSetup()
    {
        appHost = new BasicAppHost().Init();

        var container = appHost.Container;
       //code
    }
}  

, тогда пример конструктора тестового класса:

public exampleServiceTest() : base()
    {
        var container = appHost.Container;
       //RegisterAutoWired code
    }

И это прекрасно работает, если я тестирую один класссразу, потом еще и так далее.Но если я хочу запустить все тесты, я получаю, что экземпляр appHost уже существует, что очевидно.Как мне решить эту проблему, чтобы иметь возможность запускать все тесты одновременно?

РЕШЕНИЕ: Решение состоит в том, чтобы создать пустой класс, который реализует ICollectionFixture, и украсить его с помощью CollectionDefinition («Имя»).Тогда вам нужно только украсить свой тестовый класс с помощью Collection («Имя») и правильно установить конструкторы тестовых классов (разрешить службы, создать контейнер var для этого и т. Д.).Довольно простое и чистое решение для xUnit, теперь все работает нормально.Еще раз спасибо за помощь.

1 Ответ

0 голосов
/ 14 сентября 2018

Вы не можете запускать несколько тестов одновременно с AppHost в одном и том же домене приложений. Экземпляр appHost, который используется в вашем тесте, необходимо утилизировать до запуска следующего интеграционного теста.

См. Пример тестов интеграции ServiceStack , чтобы узнать, как он использует NUnit [OneTimeTearDown] для утилизации AppHost после запуска тестового устройства:

public class CustomerRestExample
{
    const string BaseUri = "http://localhost:2000/";
    ServiceStackHost appHost;

    public CustomerRestExample()
    {
        //Start your AppHost on TestFixtureSetUp
        appHost = new AppHost() 
            .Init()
            .Start(BaseUri);
    }

    [OneTimeTearDown]
    public void OneTimeTearDown() => appHost.Dispose();
}
...