我有一个类,在完成一些工作之后,它会发送一条JMS消息。
我想对“东西”进行单元测试,但不一定要发送消息。
当我运行测试时,“填充”绿色条会出现,但是在发送消息时会失败(应该,应用服务器未运行)。
最好的方法是模拟消息队列,如果是的话,它是如何完成的。
我正在使用Spring,并且注入(inject)了“jmsTemplate”以及“queue”。
最佳答案
我要使用的最简单答案是取消消息发送功能。例如,如果您有:
public class SomeClass {
public void doit() {
//do some stuff
sendMessage( /*some parameters*/);
}
public void sendMessage( /*some parameters*/ ) {
//jms stuff
}
}
然后,我将编写一个使sendMessage行为模糊的测试。例如:
@Test
public void testRealWorkWithoutSendingMessage() {
SomeClass thing = new SomeClass() {
@Override
public void sendMessage( /*some parameters*/ ) { /*do nothing*/ }
}
thing.doit();
assertThat( "Good stuff happened", x, is( y ) );
}
如果 stub 或隐藏的代码量很大,我将不使用匿名内部类,而仅使用“普通”内部类。