java - 通缉但未调用:实际上,与此模拟的交互为零
问题描述
我用的是spring boot,maven,junit4,测试代码如下,运行这个测试时,总是报如下错误:
需要但未调用:onSubscriptionEventListener.handleSubscriptionEvent(); -> 在 com.sap.ngom.urm.contract.consumer.VerifySubscriptionKafkaEventContractTest.handle_subscription_deleted_event(VerifySubscriptionKafkaEventContractTest.java:142) 实际上,与此模拟的交互为零。
需要但未调用:onSubscriptionEventListener.handleSubscriptionEvent(); -> 在 com.sap.ngom.urm.contract.consumer.VerifySubscriptionKafkaEventContractTest.handle_subscription_deleted_event(VerifySubscriptionKafkaEventContractTest.java:142) 实际上,与此模拟的交互为零。
@SpringBootTest(classes = {DummyApplication.class},
properties = {"stubrunner.kafka.enabled=true","stubrunner.stream.enabled=false","spring.kafka.bootstrap-servers: ${spring.embedded.kafka.brokers}"})
@AutoConfigureStubRunner(ids = {"com.xxx.contracts:+:stubs"}, consumerName = "urm")
@EmbeddedKafka(partitions = 1, topics = {xxx_TOPIC})
@ActiveProfiles({"contracttest"})
@RunWith(SpringRunner.class)
public class VerifyKafkaEventContractTest {
@Autowired
StubTrigger stubTrigger;
@SpyBean
OnSubscriptionEventListener onSubscriptionEventListener;
@Captor
ArgumentCaptor<SubscriptionEvent> subscriptionArgumentCaptor;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
Mockito.doNothing().when(onSubscriptionEventListener).handleSubscriptionEvent(any());
}
@Test
public void handle_subscription_deleted_event() {
stubTrigger.trigger("kafka-subscription-deletion-urm");
verify(onSubscriptionEventListener).handleSubscriptionEvent(subscriptionArgumentCaptor.capture());
}
}
这可能是@SpyBean 的错误吗?
解决方案
我的服务有其他侦听器,它们使用 spring 云流来消耗 rabbitmq 事件。所以我用spring cloud stream来实现监听器,而不是使用@kafkaListener。然后合同测试工作。假设这是将 spring cloud stream 与 kafka 一起使用时的错误
推荐阅读
- excel - 检索不适用于新文件的 XML 节点
- java - 如何在 JLabel 中创建垂直文本?
- c# - XAML 框架从未为表单行为调用 OnDetachingForm
- java - 将 double 格式化为函数参数
- perl - 在 Perl 脚本中挂起正在运行的 shell 命令
- python - 从记事本或 excel 中读取服务器列表作为输入 - Python
- reactjs - 通过属性槽路线检查器
- android - 为什么当我在服务中使用 startForeground 时,在第二次启动应用程序时不会调用 Kotlin 对象的初始化?
- sql - 将此 SQL 查询转换为使用窗口函数或任何其他更有效的方法
- postgresql - 是否通过 PostgreSQL 中的流复制来复制逻辑订阅(与所有其他数据一样)?