你们如何使用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上非常简单干净的解决方案,现在一切正常。再次感谢您的帮助。
答案 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();
}