【问题标题】:issues with RabbitListenerTestHarness, it is not workingRabbitListenerTestHarness 的问题,它不起作用
【发布时间】:2021-04-07 12:30:31
【问题描述】:

我正在尝试模拟@RabbitListener。为此,我正在使用 RabbitListenerTestHarness 但这似乎不起作用。 下面是我的项目结构

主类

@Component
public class ABC {

@Autowired
private AmqpTemplate amqpTemplate;

@RabbitListener(id="id", queues="${queue}")
 public void receiveMessage(String message) {
publishMsg(message);      
}

public void publishMsg(String msg){
    amqpTemplate.convertAndSend("exchange", "",msg); 
}

}

测试类

@RunWith(SpringRunner.class)
@SpringBootTest
public class ABCTest {

@Autowired
private RabbitListenerTestHarness harness; 

@Autowired
private RabbitTemplate rabbitTemplate;
@Test
public void testSendtoQueue() throws Exception {
    ABC listener = this.harness.getSpy("id");
    assertNotNull(listener);

    LatchCountDownAndCallRealMethodAnswer answer = this.harness.getLatchAnswerFor("id", 1); 
    doAnswer(answer).when(listener).receiveMessage(any(String.class)); 

    String data = getMockString("src/test/resources/rabbitMQ-data.json");
    
    this.rabbitTemplate.convertAndSend("Queue-name", data);

    //assertTrue(answer.await(10));
   verify(listener,times(1)).receiveMessage("data");
}

}

在上面运行时会出现如下错误

Wanted but not invoked:
customPublisherSubscriber.receiveMessageFromResponseQ(
"data"
);
-> at aero.sita.sp.spm.service.ABC.testSendtoQueue(CustomPublisherSubscriberTest.java:67)
Actually, there were zero interactions with this mock.

at aero.sita.sp.spm.service.ABC.testSendtoQueue(CustomPublisherSubscriberTest.java:67)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)

我指的是https://github.com/spring-projects/spring-amqp/blob/master/src/reference/asciidoc/testing.adoc

当我试图验证间谍对象是否收到消息时,我很难理解,但它报告了与模拟对象相关的问题。你能帮我解决这个问题吗?

【问题讨论】:

    标签: java spring rabbitmq junit5 spring-amqp


    【解决方案1】:

    您缺少@RabbitListenerTest,这是启用线束所必需的。

    https://docs.spring.io/spring-amqp/docs/current/reference/html/#test-harness

    还有,

    Wanted but not invoked:
    customPublisherSubscriber.receiveMessageFromResponseQ(
    "data"
    );
    

    我在您的测试或代码中的任何地方都没有看到对该方法的引用。

    【讨论】:

      猜你喜欢
      • 2021-03-02
      • 2020-08-01
      • 1970-01-01
      • 2021-05-10
      • 2012-04-06
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多