我有这项服务(全部在科特林):
@Service
class MyService {
fun getSomeString(): String = "test"
}
这个集成测试类:
@RunWith(SpringRunner::class)
@SpringBootTest
@EmbeddedKafka // used on some kafka tests
class BasicTests {
和方法:
@Test
fun `test method count`() {
// here I have a kafka producer sending a message to a topic that ends up
// calling myService.getSomeString via @KafkaListener from other services
verify(someObjectRelatedToMyService, atLeast(1)).getSome()
}
我尝试用someObjectRelatedToMyService
代替
@Autowired
lateinit var myService: MyService
但是后来我得到了Argument passed to verify() is of type MyService and is not a mock!
但是当我使用
@Mock
lateinit var myMock: MyService
我得到Actually, there were zero interactions with this mock.
实际上,对我来说这是有道理的,因为没有调用我的模拟程序,但是我在应用程序上的真正服务是
是否可以计算真实对象中的方法调用?
答案 0 :(得分:0)
[由于没有回复而在此处发表评论]您是否尝试过使用@Spy?然后,您可以指定要模拟的方法和要调用的方法。我以为你也可以在间谍上应用Mockito.verify ...
答案 1 :(得分:0)
您可以spy on the real object像这样对方法调用进行计数:
@Test
fun `test method count`() {
Mockito.spy(someObjectRelatedToMyService)
verify(someObjectRelatedToMyService, atLeast(1)).getSome()
}
如您所见,您唯一要做的就是调用spy方法,该方法可以跟踪与目标对象的交互。
在verify方法之前添加此调用时,您不应再收到该对象不是模拟对象的错误。