如何一次为几个服务设置ServiceStack xUnit测试?

时间:2018-09-14 14:07:16

标签: 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上非常简单干净的解决方案,现在一切正常。再次感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

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

请参见ServiceStack's Integration Tests example,了解它在运行测试装置后如何使用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();
}