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 に答える