RavenDB和XUnit:每个TestClass有多个测试



我目前尝试设置一些集成测试,以验证我的RavenDB查询返回我所期望的。

我按照文档做了一个单独的测试并运行。

问题开始时,我添加一个额外的测试方法到同一类。我得到以下异常:

System.InvalidOperationException : Cannot configure server after it was started. Please call 'ConfigureServer' method before any 'GetDocumentStore' is called.

基本上它告诉我,服务器已经在运行。但这让我很困惑。因为XUnit为该类中每个发现的测试方法创建一个测试类的新实例。此外,它在实现IDisposable的任何实例上调用Dispose()。由基类RavenTestDriver间接实现。

所以我认为发生了什么:

  1. XUnit创建一个测试类的新实例
  2. XUnit调用测试方法
  3. 我的测试方法调用ConfigureServer, RavenDB嵌入式服务器启动
  4. 我的测试方法完成
  5. XUnit在我的测试类实例上调用Dispose, RavenDB嵌入式服务器被停止
  6. 对齐并重复下一个测试方法

但是看起来,我对#5的假设是错误的。RavenDB嵌入式服务器似乎永远不会停止。另外,我找不到一种方法来手动停止它。我试图用EmbeddedServer.Instance.Dispose()手动处理它。但这改变不了什么。(.Instance给出了一个线索,EmbeddedServer可能是一个单例,这可能是这里的问题的一部分)。

我还尝试将ConfigureServer调用移动到测试类的构造函数中。因为XUnit类为每个测试方法提供了构造函数(就像JUnit中的setup方法一样)。但是我得到了相同的结果。

但有趣的部分是:在两个不同的类中调用ConfigureServer很好。

我已经创建了一个小的复制器存储库。

所以有没有人知道如何在单元/集成测试环境中设置RavenDB,你想对它运行多个测试?

从所有测试中删除ConfigureServer方法&构造函数。调用GetDocumentStore()将创建嵌入式服务器。

https://github.com/ravendb/ravendb/blob/e8f08f191e1b085421ca5b4db191b199e7a8fc69/src/Raven.TestDriver/RavenTestDriver.cs L272

如果你想配置服务器,那么你应该在一个静态构造函数中设置它:

static MovieTests_ConfigureInConstructor()
{
ConfigureServer(new TestServerOptions() {
CommandLineArgs = new System.Collections.Generic.List<string> { "--RunInMemory=true", },
FrameworkVersion = null,
});
}

相关内容

  • 没有找到相关文章

最新更新