实际上,与此模拟的交互为零,java,spring-boot,junit,spring-cloud-contract"/>

首页 > 解决方案 > 通缉但未调用:实际上,与此模拟的交互为零

问题描述

我用的是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 的错误吗?

标签: javaspring-bootjunitspring-cloud-contract

解决方案


我的服务有其他侦听器,它们使用 spring 云流来消耗 rabbitmq 事件。所以我用spring cloud stream来实现监听器,而不是使用@kafkaListener。然后合同测试工作。假设这是将 spring cloud stream 与 kafka 一起使用时的错误


推荐阅读