是否可以测试这个 Kotlin 类?
Posted
技术标签:
【中文标题】是否可以测试这个 Kotlin 类?【英文标题】:Is it possible to test this Kotlin class? 【发布时间】:2020-05-31 10:09:28 【问题描述】:我正在尝试为 Kotlin 类 A 编写单元测试用例,并尝试将 test() 方法中存在的 return client() 调用模拟到单元测试 test() 方法:
A.kt kotlin class:
class A (par 1, par 2) : B(par 1, par 2)
override fun test(item: String): Boolean
return client()
B.kt kotlin class:
abstract class B(par 1, par 2)
private val client: WebClient by lazy
//does something
protected fun client(): WebClient = client
是否可以在 test() 方法中模拟 client() 调用? 如果可能的话怎么做,我应该使用什么库来模拟?
【问题讨论】:
【参考方案1】:这应该可以使用Mockito 测试框架来实现。但是,模拟从对象方法返回的对象需要模拟对象本身。
val mockOfA = Mockito.mock(A::class)
val mockOfClient = Mockito.mock(WebClient:class)
Mockito.when(mockOfA.test(anyString())).thenReturn(mockOfClient) // Mind your original snippet return type Boolean from A.test()
如果您的类A
实现了您要在测试场景中测试的内部逻辑,则有两种可能的路径:
A
类,使其依赖ClientProvider
的外部依赖项来获取WebClient
的实例以在方法test()
中返回,并将所述提供者的模拟注入@987654329 类型的对象@在测试期间。
【讨论】:
client().post().uri("some uri").syncBody(body).execute(uri, exception) - 这是完整的,所以它返回一个布尔值以上是关于是否可以测试这个 Kotlin 类?的主要内容,如果未能解决你的问题,请参考以下文章