c# - 使用 RavenDB 运行多个测试

标签 c# .net testing ravendb

我正在使用 RavenDB 开发 WebAPI 应用程序。 我有几个具有类似大纲的 XUnit 测试:

var checkQuery = session.Query<Resource>().Where(x => x.AliasIds.Any(a => a == alias.Id));
PAssert.Throws<InvalidOperationException>(() => checkQuery.Single());

var testString = Guid.NewGuid().ToString();
Controller.Post(testString);

var res = checkQuery.Single();
PAssert.IsTrue(() => res != null);  

发生的情况是,当我同时运行多个测试时,它们在该行失败

var res = checkQuery.Single();

有异常(exception):

Result Message: System.InvalidOperationException : Sequence contains no elements

我的发现:

  • 如果我第一次调用 checkQuery.Single() 时得到评论,它会正常工作。
  • 如果我在有问题的行之前添加 Thread.Sleep(1000) 就可以正常工作。

我尝试添加

store.DatabaseCommands.DisableAllCaching();
store.Conventions.ShouldCacheRequest = _ => false;

但这并没有帮助。

最佳答案

假设 Controller.Post(testString) 正在添加一个新条目,您可能只有一个过时的索引。在现实世界中,在发布和查询之间会经过一些自然的时间。在单元测试中,您没有这种延迟,因此通常在您的索引中提供以下内容:

.Customize(x => x.WaitForNonStaleResults())

这不是你应该在生产中做的事情。您可以阅读更多in the documentation here .

关于c# - 使用 RavenDB 运行多个测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18297997/

相关文章:

.net - Mono 的 VB.Net 支持是否已准备好用于生产站点?

c# - Unity InjectionConstructor 什么时候真正运行?

Django单测迁移

testing - 如何测试 Meteor 应用程序?

testing - grails代码覆盖无法访问方法

c# - USB 闪存驱动器模拟(如 cd/dvd rom 虚拟驱动器)-是否可能

c# - 在using语句中调用异步方法

c# - 如何在 C# 中将 asp 文件作为 Web 服务器运行?

c# - 按值传递结构

.net - BDD测试框架