2017-09-21 11 views
0

私のテストでは、テストレベルでFutureとして公開されていないデータベースアクションがいくつかあります。場合によっては、私のテストが速く実行されて、close()がクリーンアップされた後にデータベースの処理が完了すると、醜いエラーが発生することがあります。飛行中の命令数を検出する方法はありますか、それ以外の場合はclose()を押し続けてください。Slickで文の実行が完了するまで待つ

答えて

0

クエリを実行するとFuture[A]が得られます。ここで、Aはクエリの結果です。

Future.sequence()を使用してすべてのクエリを作成し、すべてのクエリが結果を返したときに完了する1つの将来を得ることができます。composedFuture

ここでcomposedFuture.map(_ => close())を使用すると、すべてのクエリの実行が完了し、リソースを閉じることができます。

これは、今後のアクションを公開して作成することをお勧めします。 そうでなければ、Thread.sleep(someSensibleTime)を入れて、あなたの未来がsomeSensibleTime以内に完了することを願うかもしれませんが、これはあなたのテストを遅くし、エラーを起こさせます。

+0

ええ、問題は、私のAPIが2つの「未来」のうちの1つを返す必要があることです。これにより、他のクエリは難しいものになります。私は終わりに、そのAPIを再考する必要があると思います。 – acjay

0

私はそれが滑らかに依存するのではなく、データベースに依存するかもしれないと思います。

たとえば、mysql技術を使用すると、現在実行中のクエリを「show processlist」というクエリで確認し、それに従って処理することができます。

これはオプションではない場合は、選択した副作用を観察するためにdbをポーリングした後、後でclose()することができますか?

関連する問題