我正在尝试测试一种在单独的线程中工作的方法,简化如下:
public void methodToTest()
{
Thread thread = new Thread()
{
@Override
public void run() {
Clazz.i = 2;
}
};
thread.start();
}
在我的单元测试中,我想测试 Clazz.i == 2,但我不能这样做,因为我认为断言是在线程更改值之前运行的。我想用另一个线程来测试它,然后用 join 等待,但它仍然不起作用。
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
在断言之后执行。
我怎样才能使第一个线程等待它启动的线程以及该线程启动的任何线程?