我有一个类,在完成一些工作之后,它会发送一条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 或隐藏的代码量很大,我将不使用匿名内部类,而仅使用“普通”内部类。

09-30 14:34
查看更多