首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用RabbitListenerTestHarness与Mockk

使用RabbitListenerTestHarness与Mockk
EN

Stack Overflow用户
提问于 2022-01-10 16:34:43
回答 1查看 183关注 0票数 0

我们希望为使用Spring和Spring的项目编写测试。当我们在Kotlin中编码时,我们希望使用MockK而不是Mockito,因为它更适合Kotlin代码风格和最佳实践。

RabbitListenerTestHarness类为测试@RabbitListener提供了一些方便的特性,但是它返回了与MockK的Answer接口不兼容的Mockito的Answer接口的实现。

是否有一种使用MockK的Mockito答案的方法,例如一些用于互操作性的现有包装器?

考虑下面的示例侦听器:

代码语言:javascript
复制
class SampleListener {
  @RabbitListener(id = "sampleReceiver", queues = ["testQueue"])
  fun receiveMessage(message: Message) {

  }
}

而实际测试:

代码语言:javascript
复制
@SpringBootTest
class SampleTest(@Autowired val template: TestRabbitTemplate) {
  @Autowired
  lateinit var testHarness: RabbitListenerTestHarness

  @Test
  fun testRabbit() {
    val spy = testHarness.getSpy<SampleListener>("sampleReceiver")
    val answer: LatchCountDownAndCallRealMethodAnswer = testHarness.getLatchAnswerFor("sampleReceiver", 1)

//    Mockito.doAnswer(answer).`when`(spy).receiveMessage(ArgumentMatchers.any())
    every { spy.receiveMessage(any()) } answers { /* what goes here? */ }

    template.convertAndSend("testQueue", "test")
  }
}

测试包含文档中提到的Mockito调用作为注释。我的问题是,如何使用从getLatchAnswerFor返回的答案对象来完成MockK存根?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-10 16:53:31

在消息侦听器周围添加您自己的代理可能更容易一些。

  • RabbitListenerEndpointRegistry获取容器
  • 从容器中获取侦听器,将其包装在代理中,并将其设置在容器上。
  • 停止/启动容器
  • 发送信息
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70655814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档