サイのモックでバックグラウンドワーカーをテストする
-
06-07-2019 - |
質問
バックグラウンドスレッドでdbクエリを実行するクラスにバックグラウンドワーカーがいると言います。
このクラスをテストしたい
だから、私のデータベースをモックし、これまでのところ良いコレクションを返します。 バックグラウンドワーカーがdo workと呼ばれることを確認してください そして、私も仕上げが起こったことを確認したいより。
テストがランダムに成功および失敗することに気づきました(スレッドと関係があると思います)
提案
解決
バックグラウンドスレッドとアサート/検証の間に競合状態がある可能性があります。
例:
[Test]
public void TestWithRaceCondition()
{
bool called = false;
new Thread(() => called = true).Start();
Assert.IsTrue(called);
}
スレッドは、アサートの前に必ずしも終了するわけではありません。終了する場合と終了しない場合があります。この場合の解決策は、バックグラウンドスレッドに参加することです:
[Test]
public void TestWithoutRaceCondition()
{
bool called = false;
var thread = new Thread(() => called = true);
thread.Start();
thread.Join()
Assert.IsTrue(called);
}
競合状態であるかどうかを確認する1つの方法は、テストスレッドを遅延させ(アサートの直前にThread.Sleepを呼び出す)、テストが失敗を停止した場合、競合状態の良い兆候です。
所属していません StackOverflow