4
我們正在升級到RavenDB 2.5並且遇到了特殊情況。 我們的單元測試之一突然失敗,並且沒有明顯的原因。RavenDB EmbeddableDocumentStore中可能存在的錯誤
下面是一些簡單的代碼來重現問題:
class Foo
{
public Guid Id { get; private set; }
public DateTime? ExpirationTime { get; set; }
public Foo()
{
Id = Guid.NewGuid();
ExpirationTime = null;
}
}
var documentStore = new EmbeddableDocumentStore
{
RunInMemory = true,
Conventions = { DefaultQueryingConsistency = ConsistencyOptions.QueryYourWrites }
};
documentStore.Initialize();
using (var session = documentStore.OpenSession())
{
session.Store(new Foo());
session.Store(new Foo());
session.SaveChanges();
}
所以,現在我們已經在數據庫中兩個文件,都與ExpirationTime = NULL。 這是查詢這些文檔數據庫的時候會發生什麼:
using (var session = documentStore.OpenSession())
{
var bar = session.Query<Foo>().Where(foo => foo.ExpirationTime == null).ToList();
Console.WriteLine("1. Number of documents: {0}", bar.Count);
bar = session.Query<Foo>().Where(foo => foo.ExpirationTime == null ||
foo.ExpirationTime > DateTime.Now).ToList();
Console.WriteLine("2. Number of documents: {0}", bar.Count);
bar = session.Query<Foo>().Where(foo => foo.ExpirationTime == null |
foo.ExpirationTime > DateTime.Now).ToList();
Console.WriteLine("3. Number of documents: {0}", bar.Count);
}
這些查詢的輸出結果如下:
1. Number of documents: 2
2. Number of documents: 0
3. Number of documents: 2
這似乎並不正確,我...我希望也給數字2.給予2.
我運行了相同的查詢對RavenDB服務器,並得到了預期的結果,所以這似乎是EmbeddableDocumentStore的問題。
在測試時,我還發現在其他情況下使用邏輯或運算符時會出現一些奇怪的行爲。有時使用foo.HasValue
會得到與foo != null
不同的結果,但這可能與同一問題有關。
任何其他人都遇到過這個問題?已知的錯誤?
[RavenDb:強制索引要等到單元測試時不會失效](http://stackoverflow.com/questions/10316721/ravendb-force-indexes-to-wait-until-not-陳舊的單元測試) 它可能是一個'陳舊索引'? – NoLifeKing
@NoLifeKing我沒有在示例代碼中顯示它,當單元測試時,我總是使用'DefaultQueryingConsistency = ConsistencyOptions.QueryYourWrites'或'WaitForNonStaleResultsAsOfLastWrite()'。此外,在升級到Raven 2.5之前,它確實按預期工作。 –
請發送一個失敗的單元測試到郵件列表 –