【发布时间】:2021-03-28 05:26:45
【问题描述】:
在我正在测试的方法中,我有这个:
val client = PushClient()
...
client.sendPushNotificationsAsync(chunk)
如您所见,PushClient 不是 bean...我如何模拟 sendPushNotificationsAsync 方法?
这样尝试过,但不起作用,没有被调用...
val mockPushClient = mock(PushClient::class.java)
val ticket = ExpoPushTicket()
ticket.status = Status.OK
val cf = CompletableFuture.completedFuture(listOf(ticket))
Mockito.doReturn(cf).`when`(mockPushClient).sendPushNotificationsAsync(any())
【问题讨论】:
-
如果
client是实例或方法范围变量并且这很重要,您的问题并不清楚。 -
我以前也遇到过你的情况。如果您使用的是 Spring,那么正确的做法是定义一个 bean 并将其作为依赖项注入到您的类中。这样你就可以测试它了。如果您的项目可行,这将是您的最佳选择。
-
我想说的和@StefanZhelyazkov 差不多,即测试对象不应该创建 PushClient 实例本身,而应该只依赖于该对象。这将使使用 Mockito 更容易模拟它。在这种情况下,我还发现 JMockit 有助于克服无法更改测试主题但没有在 Kotlin 中大量使用它的情况——不过,我认为它可以工作。
标签: spring-boot unit-testing kotlin testing mockito