java - 发送 JMS 消息的单元测试代码

标签 java unit-testing spring jms jmstemplate

我有一个类,它在完成某些操作后发送一条 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 ) );
}

如果被删减或模糊的代码量很大,我不会使用匿名内部类,而只是使用“普通”内部类。

关于java - 发送 JMS 消息的单元测试代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/335621/

相关文章:

java - @OneToMany 实际上是带有参数的 OneToOne/@Formula

java - Rest API 中的 JWT token 传递

java - 在我的 JTextField 中显示我的 getRank

java - 用户登录 Facebook 后显示消息

java - foreach 循环 java 创建?

c++ - QT造物主: How to generate the library and testing executable for a custom widget

具有类型和值参数化的 C++ 单元测试框架

java - 有谁知道如何更改 Spring security oauth2 中的响应错误格式?

java - 我如何从 Java 运行 UNIX 终端并向它发送命令?

unit-testing - Vue.js 单元测试 - 具有异步数据的模拟服务