Java 线程实现中run方法JUnit测试的优雅解决方案
我有一个从Thread扩展而来的类,希望JUnit对其进行测试。此时,我不想测试线程安全性,只想检查实现逻辑是否工作正常。我的问题是run方法会无限期地迭代,例如:Java 线程实现中run方法JUnit测试的优雅解决方案,java,junit,runnable,Java,Junit,Runnable,我有一个从Thread扩展而来的类,希望JUnit对其进行测试。此时,我不想测试线程安全性,只想检查实现逻辑是否工作正常。我的问题是run方法会无限期地迭代,例如: public void run() { while (status.isRunning()) { // do stuff & sleep } } 出于测试的目的,我只想在run方法中迭代逻辑一次。我想出的解决这个问题的最好办法是使用静态计数器和
public void run() {
while (status.isRunning()) {
// do stuff & sleep
}
}
出于测试的目的,我只想在run方法中迭代逻辑一次。我想出的解决这个问题的最好办法是使用静态计数器和Answer的匿名实现的Mockito mock对象:
private static int counter = 0;
Status status = mock(Status.class);
when(status.isRunning()).thenAnswer(new Answer<Boolean>() {
public Boolean answer(InvocationOnMock invocation) throws Throwable {
if (counter == 0) {
counter++;
return Boolean.TRUE;
}
return Boolean.FALSE;
}
});
我不确定这个解决方案是否是最好的。对于一个常见的用例来说,这似乎有点冗长
有人能想出一个更简单、更优雅的解决方案吗?您不需要做任何神奇的事情,只需在thenReturn方法中提供多个答案,例如
when(status.isRunning()).thenReturn(true, false);