2013-08-18 35 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 –

相關問題