2013-08-18 36 views
1

我正在使用RavenDB进行WebAPI应用程序。 我有一对夫妇的具有一种相似的轮廓的xUnit测试:使用RavenDB运行多个测试

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; 

,但它并没有帮助。

回答

2

假设Controller.Post(testString)正在添加一个新条目,您可能只是有一个陈旧的索引。在现实世界中,一段自然的时间会在帖子和查询之间传递。在单元测试中,你没有这样的延迟,所以它是常见的是提供您指数如下:

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

这是不是你应该在生产做。你可以阅读更多in the documentation here

+0

没有检查它是否是答案,但有没有办法在商店配置中以某种方式设置它? –

+0

请参阅http://stackoverflow.com/a/9059083/634824 –

相关问题