servicestack - 如何一次为几个服务设置 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 上非常简单和干净的解决方案,现在一切正常。再次感谢您的帮助。
解决方案
您不能在同一个 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();
}
推荐阅读
- laravel-livewire - 如何在 javascript 中使用 Livewire 组件?
- html - 如何创建 HTML 下拉菜单
- sql - 使用单个 SQL 查询对每个级别的分层数据进行小计
- vue.js - 将 Bootstrap 包含到 Vue-Project 时出错
- javascript - 使用箭头函数检查字符串是否为回文
- c++ - 自动生成基于成员的操作?
- raspberry-pi - 尝试在 QEMU 下运行 Raspberry-Pi 映像,但 VM 内存限制为 256MB
- ios - SwiftUI 中的左右填充(不是前导和尾随)
- python - 我尝试在 django 中构建的测验 - 如何使其工作?
- java - 如何在以正确方式获取的事务之外初始化延迟加载的集合?