gpt4 book ai didi

spring-boot - @SpyBean 和 Mockito.any() 在验证期间

转载 作者:行者123 更新时间:2023-12-04 03:08:37 29 4
gpt4 key购买 nike

我遇到以下问题。我有一个 Spring 启动测试,我在其中注入(inject)和监视 mongoDbChannel bean 。然后我尝试启动正常的工作流程并验证方法 send在 bean 上调用。

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MongoAsBackupConfig.class},
properties = {},
webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class MongoAsBackupConfigTest {
@SpyBean(name = "mongoDbChannel")
private QueueChannel mongoDbChannel;

@Autowired
private DirectChannel mongoDbWithFailoverChannel;

@DirtiesContext
@Test
public void shouldUseFallbackForFullQueue() throws InterruptedException {
IntStream.rangeClosed(1, BACKUP_QUEUE_CAPACITY + OVERFILLING_CLICK_COUNT).forEach(someNumber ->
mongoDbWithFailoverChannel.send(MessageBuilder.withPayload(createPayload(someNumber)).build()));
verify(mongoDbChannel, times(BACKUP_QUEUE_CAPACITY)).send(Mockito.any());
}
}

结果,我收到了 any 的错误消息。与具体参数值不匹配。但是通常 any表示参数的任何值。这里出了什么问题?
Argument(s) are different! Wanted:
mongoDbChannel.send(
<any>
);
-> at MongoAsBackupConfigTest.shouldUseFallbackForFullQueue(MongoAsBackupConfigTest.java:67)
Actual invocation has different arguments:
mongoDbChannel.send(
GenericMessage [payload=Click(...), headers={id=0eaa2317-b1b5-604d-65c5-78da521cd585, timestamp=1509085945379}],
10
);
-> at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:115)

编辑:
我正在使用 java 8。我尝试使用 any(GenericMessage.class) , any(Message.class)但效果是一样的。

最佳答案

我假设您使用的是 java 8,这意味着在使用 Mockito.any() 时,编译器将根据send的签名中的参数类型推断必须使用的类型方法。

好像是 Message基于方法定义:send(Message<?> message)
实际传递的是 GenericMessage 的一个实例.

我假设 GenericMessage扩展 Message ,然后你可以写你的verify如下:

verify(mongoDbChannel, times(BACKUP_QUEUE_CAPACITY))
.send(Mockito.any(GenericMessage.class));

更新

似乎还有一个重载的方法 send(Message<?> message, long timeout) .也许这个版本被调用而不是单个 arg 一个..

关于spring-boot - @SpyBean 和 Mockito.any() 在验证期间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46968986/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com