我正在尝试编写一个JMS服务的集成测试,它看起来像这样。JMS集成测试
@JmsListener(destination = "mailbox", containerFactory = "myFactory")
public void receiveMessage(Email message) throws InterruptedException {
try {
sendEmail(message);
}catch (Exception e){
LOGGER.log(Level.SEVERE,"Failed to deliver email",e);
Thread.sleep(TimeUnit.SECONDS.toSeconds(Optional.of(retryInterval).orElse(5)));
throw e;
}
}
private void sendEmail(Email message){
...............
}
首先,我可以嘲笑这一些怎么样?我试图嘲笑它,但是当我发送消息时,spring启动应用程序正在调用实际的JMS bean而不是模拟的。似乎这是不可能的。 即使这是不可能的,我是否可以至少调用bean并以某种方式检查receiveMessage方法是否被调用。而且,如果它被调用,sendEmail部分应该是伪造的,这样它就不会做任何工作。我有一些想法,比如创建一个用于测试的子类,但对其中的任何一个都不满意。所以想要如果你可以建议我一个更好的解决办法?
实际上,我使用了类似的方法,并在内存消息队列中使用了活动的mq。创建了两个配置文件,测试和从哪里启动不同的东西。 – Imran