我正在使用mockito来编写测试,但我真的很苦恼如何测试这段特定的代码:
public void myMethod() {
try {
Thread.sleep(400);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
很多在线示例都使用强制尝试中的任何内容抛出错误的示例 - 但我看过的所有内容都大喊“不要模拟线程”
有没有办法可以使用
Thread.interrupt()
或类似方法强制中断代码?
我确实开始尝试使用间谍:
Thread threadSpy = spy(new Thread());
threadSpy.interrupt();
assertThatExceptionOfType(RuntimeException.class);
但我可以看到这实际上并没有导致
myMethod
中的线程中断,因此实际上并没有测试那段代码。
这是测试
public class AppTest {
@SneakyThrows
@Test
void test() {
AtomicReference<Throwable> reference = new AtomicReference<>();
Thread thread = new Thread(() -> {
try {
this.myMethod();
} catch (Throwable t) {
reference.set(t);
}
});
thread.start();
thread.interrupt();
thread.join();
assertNotNull(reference.get());
}
public void myMethod() {
try {
Thread.sleep(400);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}
确保睡眠值足够大。