- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试测试 RabbitTemplate#convertAndSend编写为 lambda 的方法,如下所示:
// other stuff omitted for brevity
rabbitTemplate.convertAndSend(myQueue, jsonString, message -> {
message.getMessageProperties().setPriority(priority);
return message;
});
// other stuff omitted for brevity
我尝试执行的测试用例是使用 ArgumentCaptor
来验证是否使用正确的参数调用该方法。
@Test
public void givenMyNotification_whenElementIsSent_thenSetPriorityAndSendValidParameters() {
final ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
final int expectedPriority = 5;
final Notification expected = TestUtils.getNotification();
testClass.handleNotification(expected);
verify(rabbitTemplate).convertAndSend(captor.capture(), captor.capture(),
ArgumentMatchers.eq(MessagePostProcessor.class));
// assertThat...
));
}
由于参数不同,测试在验证步骤失败。
Wanted:
<Capturing argument>,
<Capturing argument>,
interface org.springframework.amqp.core.MessagePostProcessor
Actual invocation:
"myQueue",
"myJson",
com.example.notification.service.NotificationService$$Lambda$5/73698537@5bda80bf
我尝试了mockito和hamcrest的其他几个匹配器,但没有成功。
所以,我的问题是:
如何测试这种东西?
这是否是一个好的做法,或者是否有其他/更好的方法来测试兔子模板发送?
最佳答案
除了最后一个匹配器 ArgumentMatchers.eq(MessagePostProcessor.class)
之外,您几乎一切顺利。
您实际上要求Mockito将相等性与参数的类相匹配。你应该匹配:
ArgumentMatchers.any(MessagePostProcessor.class) 的参数类型
ArgumentMatchers.eq(expectedMessageProcessor)
(如果您碰巧有的话)但是,在这种特殊情况下,如果您使用第一个选项,则可能会遇到编译器问题,因为 RabbitTemplate
类有两个类似的方法:
要解决此问题,您可以将第二个参数的类型强制为对象,如下所示:
Mockito.verify(rabbitTemplate).convertAndSend(captor.capture(), (Object) captor.capture(),
Mockito.any(MessagePostProcessor.class));
或者更好的是,为两个不同的参数设置两个不同的 ArgumentCaptor
:
ArgumentCaptor<String> routingKeyCaptor = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<Object> messageCaptor = ArgumentCaptor.forClass(Object.class);
...
verify(rabbitTemplate).convertAndSend(routingKeyCaptor.capture(), messageCaptor.capture(), any(MessagePostProcessor.class));
希望这有帮助!
关于java - 使用 Mockito 和 JUnit 将 RabbitTemplate#convertAndSend 测试为 lambda,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52191857/
我正在阅读 Spring Framework reference ,关于 JMS 集成的章节。有一些发送文本消息和异步接收它们(通过监听器)的示例。还有一个 JmsTemplate 函数 conver
我有以下代码: @Controller @EnableScheduling public class QuoteController { @Scheduled(fixedDelay=5000)
我正在使用 RabbitMQ 将消息发送到队列,在消费者中我得到它,但我无法转换它。 当我发送它时,我会这样做。 rabbitTemplate.convertAndSend("myExchange",
我是 Spring boot websocket 和消息传递语义的新手。目前我可以使用以下代码发送私有(private)消息。 String queueName = "/user/" + userna
这是一个小的 Spring 程序,它希望将一条消息插入到 rabbitmq 队列中: public class Main { public static void main(String [] a
我正在使用带有 RabbitMQ 的 Spring STOMP over Websocket。一切正常,但 simpMessagingTemplate.convertAndSend 工作速度很慢,调用
我在尝试使用 RabbitTemplate.convertAndSend 发布消息时随机遇到 NullPointerException 我尝试了 spring-amqp:1.7.6 和 spring-
对于 Spring Websocket 我有以下内容并且工作正常: private final SimpMessagingTemplate simpMessagingTemplate; ... @Sc
我正在尝试测试 RabbitTemplate#convertAndSend编写为 lambda 的方法,如下所示: // other stuff omitted for brevity
我是一名优秀的程序员,十分优秀!