Я пытаюсь протестировать метод, который работает в отдельном потоке, упростил его следующим образом:
public void methodToTest()
{
Thread thread = new Thread()
{
@Override
public void run() {
Clazz.i = 2;
}
};
thread.start();
}
В моем unit test я хочу проверить, что Clazz.i == 2, но я не могу этого сделать, потому что я думаю, что assert выполняется до того, как поток изменит значение. Я думал использовать другой поток, чтобы проверить его, а затем использовать соединение, чтобы ждать, но он все еще не работает.
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;
}
Я думаю, что это связано с тем, что основной код теста создает поток, который ждет (присоединяется) ко второму потоку, но второй поток не выполняет работу, он создает другой поток для выполнения работы и затем заканчивает, что продолжает первый поток, а третий поток выполняет Clazz.i = 2
после утверждения.
Как я могу сделать это так, чтобы первый поток ожидал, что поток запускает , а также любые потоки, которые этот поток запускает?