別のスレッドで機能するメソッドをテストしようとしていますが、単純化すると次のようになります。
public void methodToTest()
{
Thread thread = new Thread()
{
@Override
public void run() {
Clazz.i = 2;
}
};
thread.start();
}
私の単体テストでは、Clazz.i == 2 をテストしたいのですが、スレッドが値を変更する前にアサートが実行されると思うので、これを行うことはできません。別のスレッドを使用してテストし、結合を使用して待機することを考えましたが、それでも機能しません。
SSCCE:
@Test
public void sscce() throws InterruptedException
{
Thread thread = new Thread()
{
@Override
public void run() {
methodToTest()
}
};
thread.start();
thread.join();
AssertEquals(2, Clazz.i);
}
public static class Clazz
{
public static int i = 0;
}
これは、テストのメイン コードが 2 番目のスレッドを待機 (結合) しているスレッドを作成するが、2 番目のスレッドは作業を実行せず、別のスレッドを作成して作業を実行してから終了し、最初のスレッドを続行するためだと思います。スレッド、3 番目のスレッドはClazz.i = 2
アサーションの後に実行します。
最初のスレッドが開始するスレッドと、そのスレッドが開始するスレッドを待機するようにするにはどうすればよいですか?