使用MockK时verify报错:KafkaService实例并非Mock对象
问题:MockK生成的对象被提示非Mock实例
问题详情
运行测试代码时出现错误,相关代码及错误信息如下:
测试代码
@ExtendWith(MockKExtension::class) class SenderServiceTest { @MockK lateinit var kafkaService: KafkaService<KeyType, MessageType> @Test fun `Send message`() { val key = KeyType() val value = MessageType() verify(kafkaService).send(key, value) } } @Service @ConditionalOnProperty(name = ["kafka.enabled"]) class KafkaService<K, V>(val producerFactory: ProducerFactory<K, V>, val names: KafkaNames) { fun send(key: K, value: V) { // some code to send the message. } }
错误信息
org.mockito.exceptions.misusing.NotAMockException: Argument passed to verify() is of type KafkaService and is not a mock! Make sure you place the parenthesis correctly!
不清楚为何提示该Mock Bean并非Mock对象,希望找出原因。
原因与解决方案
核心原因
你混用了MockK和Mockito的API:
- 使用MockK的
@MockK注解和MockKExtension创建Mock对象,但调用的是Mockito的verify()方法。 - MockK生成的Mock实例只能被MockK自身的API识别,Mockito无法将其判定为自己创建的Mock,因此抛出错误。
修复步骤
- 确保导入MockK的
verify方法:
import io.mockk.verify
- 将验证代码修改为MockK的语法:
verify { kafkaService.send(key, value) }
修改后即可正常验证MockK生成对象的方法调用。
内容的提问来源于stack exchange,提问作者ever alian
相关产品推荐
相关产品推荐

