c# - RavenDB 和 XUnit:每个 TestClass 的多个测试
问题描述
我目前尝试设置一些集成测试,以验证我的 RavenDB 查询是否返回了我期望的结果。
我遵循了文档并启动并运行了一个测试。
当我向同一个类添加额外的测试方法时,问题就开始了。我得到以下异常:
System.InvalidOperationException : Cannot configure server after it was started. Please call 'ConfigureServer' method before any 'GetDocumentStore' is called.
所以基本上它告诉我,服务器已经在运行。但这让我很困惑。因为 XUnit 为该类中每个发现的测试方法创建了一个新的测试类实例。此外,它调用Dispose()
任何实现IDisposable
. 这是由基类间接实现的RavenTestDriver
。
所以我认为正在发生的事情:
- XUnit 创建我的测试类的新实例
- XUnit 调用我的测试方法
- 我的测试方法调用
ConfigureServer
,RavenDB Embedded Server 已启动 - 我的测试方法完成
- XUnit 调用
Dispose
我的测试类实例,RavenDB 嵌入式服务器已停止 - 冲洗并重复下一个测试方法
但我看起来,我对#5 的假设是错误的。RavenDB 嵌入式服务器似乎从未停止过。此外,我找不到手动停止它的方法。我试图用EmbeddedServer.Instance.Dispose()
. 但这不会改变任何事情。(这.Instance
给出了一个线索,EmbeddedServer 可能是一个单例,这可能是这里问题的一部分)。
我还尝试将ConfigureServer
调用移动到测试类的构造函数中。由于 XUnit 类是每个测试方法的构造函数(就像setup
JUnit 中的 -method)。但后来我得到了同样的结果。
但有趣的是:调用ConfigureServer
两个不同的类就可以了。
我创建了一个小型复制器存储库。
那么有没有人知道如何在一个单元/集成测试环境中设置 RavenDB,你想针对它运行多个测试?
解决方案
ConfigureServer
从所有测试和构造函数中删除该方法。调用GetDocumentStore()
将创建嵌入式服务器。
如果要配置服务器,则应将其设置在静态构造函数中:
static MovieTests_ConfigureInConstructor()
{
ConfigureServer(new TestServerOptions() {
CommandLineArgs = new System.Collections.Generic.List<string> { "--RunInMemory=true", },
FrameworkVersion = null,
});
}
推荐阅读
- javascript - jQuery html() 函数和
- sharepoint - SharePoint 警报无法正常工作
- c# - 如何在 DataList 中对饼图进行数据绑定
- python - 网格搜索分类的自定义评分功能
- javascript - 在 React 渲染输入中动态添加属性
- php - 使静态函数仅通过子类可见
- excel - Power Query(M语言)中如何引用动态列名
- jquery - 更改 PayPal 付款按钮
- jquery - 我可以在 VueJs 中使用 BS4+jQuery 模板吗
- vba - Excel VBA - CreateObject 和新 Internet Explorer 之间的区别