首页 > 解决方案 > 如何一次为几个服务设置 ServiceStack xUnit 测试?

问题描述

你们如何使用 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("Name") 进行装饰。然后,您只需要使用 Collection("Name") 装饰您的测试类并正确设置测试类构造函数(解析服务,为其创建 var 容器等)。xUnit 上非常简单和干净的解决方案,现在一切正常。再次感谢您的帮助。

标签: servicestackxunit

解决方案


您不能在同一个 AppDomain 中同时使用 AppHost 运行多个测试。您的测试使用的appHost实例需要在运行下一个集成测试之前进行处置。

请参阅ServiceStack 的集成测试示例,了解它[OneTimeTearDown]在运行测试夹具后如何使用 NUnit 处理 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();
}

推荐阅读