【发布时间】:2019-12-02 05:23:36
【问题描述】:
我按照许多博客的分步说明使用 MockK 实现模拟:
class SWServiceImplTest {
@MockK
lateinit var externalApi: ExternalApiService
@InjectMockKs
lateinit var SWService: SWServiceImpl
@Before
fun setUp() = MockKAnnotations.init(this)
@Test
fun SWCharacterReturnsCorrectValues() {
every { externalApi.get<Characters>(Utils.SW_API) } returns mockCharacters()
val result = SWService.swCharacter!!
assertEquals("blue", result.first().color?.toLowerCase())
assertEquals(result.size, 3)
}
}
我想将externalApi 注入我的SWService 服务并模拟注入对象(externalApi)的get 方法,但似乎忽略了模拟。
日志:
15:09:54.497 [main] DEBUG io.mockk.impl.instantiation.AbstractMockFactory - Creating mockk for <error "java.lang.NoClassDefFoundError: kotlin/coroutines/intrinsics/IntrinsicsKt"> name=externalApi#1
15:09:56.820 [main] DEBUG org.springframework.web.client.RestTemplate - HTTP GET https://xxx.xxx/
15:09:57.038 [main] DEBUG org.springframework.web.client.RestTemplate - Accept=[application/json, application/*+json]
org.springframework.web.client.RestClientException: No HttpMessageConverter for java.lang.Object and content type ""
在我的SWService 文件中,externalApi 在伴随对象中被初始化:
companion object{
val api = ExternalApiService()
}
我的实现有问题吗? 谢谢
【问题讨论】:
-
你是如何在
SWService类中初始化externalApi的?你能把那个代码也贴一下吗? -
感谢@SuryavelTR 的评论。我更新了我的消息:它在我的类中的伴随对象中初始化
-
删除了一条评论。错过了关于 InjectMocks SWService 的要点。所以。您无法将 InjectMocks 注入伴随对象。我建议在构造函数中使用
api类似的lateinit var作为字段或val(相信这个也可以) -
这能回答你的问题吗? How to mock a Kotlin singleton object?
标签: spring-boot kotlin junit mockk