我有一个我想测试的方法的实现。如何从JUnit线程中断信号量?
@Override
public void onMessage(final Message message) {
try {
LOG.fine("waiting on semaphore for " + message);
semaphore.acquire();
LOG.fine("semaphore acquired for " + message);
listener.onMessage(message);
LOG.fine(message + " processed");
} catch (final InterruptedException e) {
throw new RuntimeException(e);
} finally {
semaphore.release();
}
}
但是,我不确定如何在JUnit测试中安装InterruptedException。在理论上,我可以添加钩子来终止它,但是这会污染代码库,只用于测试的代码,我想避免。
请你解释一下,你要当你的方法是在semaphore.acquire等待()从JUnit测试调用semaphore.release(); ? – dbf
它只是测试JMS消息传递的代码片段,以确保在我期望的时候发送和处理所有消息。完整的源代码是在这里:https://github.com/trajano/maven-jee6/blob/master/maven-jee6-test/src/main/java/net/trajano/maven_jee6/test/LatchedMessageListener.java –
我可以测试它的工作原理,但我无法测试信号量会导致异常中断的情况。 –