是否有可能在Kotlin模拟Mockito的访问者?

tse*_*tse 14 mockito kotlin

是否有可能通过Mockito模拟房产的吸气剂和设定者?像这样的东西:

@Test
fun three() {
    val m = mock<Ddd>() {
//        on { getQq() }.doReturn("mocked!")
    }
    assertEquals("mocked!", m.qq)
}
open class Ddd {
     var qq : String = "start"
        set(value) {
            field = value + " by setter"
        }
        get() {
            return field + " by getter"
        }
}
Run Code Online (Sandbox Code Playgroud)

Rus*_*lan 14

要模拟getter,只需写:

val m = mock<Ddd>()
`when`(m.qq).thenReturn("42")
Run Code Online (Sandbox Code Playgroud)

我还建议使用mockito-kotlin,使用有用的扩展和功能,如whenever:

val m = mock<Ddd>()
whenever(m.qq).thenReturn("42")
Run Code Online (Sandbox Code Playgroud)

  • 如果qq是lateinit var怎么办 (2认同)
  • @RachitMishra启用模拟最终方法,你将能够模拟lateinit.见http://static.javadoc.io/org.mockito/mockito-core/2.11.0/org/mockito/Mockito.html#Mocking_Final (2认同)

Eye*_*ear 6

为了补充IRus的答案,您还可以使用以下语法:

val mockedObj = mock<SomeClass> {
  on { funA() } doReturn "valA"
  on { funB() } doReturn "valB"
}
Run Code Online (Sandbox Code Playgroud)

要么

val mockedObj = mock<SomeClass> {
  on(it.funA()).thenReturn("valA")
  on(it.funB()).thenReturn("valB")
}
Run Code Online (Sandbox Code Playgroud)