我正在使用 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/