1

我正在使用 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();

除了:

结果消息:System.InvalidOperationException:序列不包含任何元素

我发现了什么:

  • 如果我第一次打电话给 checkQuery.Single() 评论,它工作正常。
  • 如果我在有问题的行之前添加 Thread.Sleep(1000) 效果很好。

我试图添加

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

但这没有帮助。

4

1 回答 1

2

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

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

这不是您在生产中应该做的事情。您可以在此处的文档中阅读更多信息。

于 2013-08-18T17:25:06.953 回答