kotlin - 扩展Mockito验证Kotlin不起作用(在 “kotlin way”中)

标签 kotlin kotlin-android-extensions kotlin-extension

我想扩展验证以允许检查同一模拟对象上的多个命令,但它不起作用,它可以编译,但在运行时不要在同一对象上运行每个命令。

只是想避免编写更多类似的内容:

Mockito.verify(mockedView).initViews()
Mockito.verify(mockedView).setImage(user.photoUrl)

并像这样写:
Mockito.verify(mockedView){
    initViews()
    setImage(user.photoUrl)
}

第一次尝试:
@Test
fun onCreate_loadLoginInfo() {
    val user = MockUser.user()

    presenter.onCreate(mockedView, user)

    Mockito.myVerify(mockedView) {
        initViews()
        setImage(user.photoUrl)
        setName(user.name)
        setEmail(user.email)
    }
}

class Mockito {
    companion object
}

fun <T> Mockito.Companion.myVerify(obj: T, func: T.() -> Unit) {
    org.mockito.Mockito.verify(obj).func()
}

第二次尝试:
@Test
fun onCreate_loadLoginInfo() {
    val user = MockUser.user()

    presenter.onCreate(mockedView, user)

    Mockito.myVerify(mockedView) {
        it.initViews()
        it.setImage(user.photoUrl)
        it.setName(user.name)
        it.setEmail(user.email)
    }
}

class Mockito {
    companion object
}

fun <T> Mockito.Companion.myVerify(obj: T, func: (T) -> Unit) {
    val mock = org.mockito.Mockito.verify(obj)
    func(mock)
}

但是这些都不起作用,即使我没有在演示者中调用方法,所有测试都通过了,我该怎么做?

最佳答案

我遇到了同样的问题,并写了Facade around Mockito
我的库允许验证围绕一个模拟对象的几个调用:

val list = mock(MutableList::class)

list.add("String 1")
list.add("String 2")
list.size()

verify(list) {
    times(2).add(anyString())
    times(1).size()
}

请查看自述文件,也许它可以为您提供帮助

关于kotlin - 扩展Mockito验证Kotlin不起作用(在 “kotlin way”中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35484498/

相关文章:

android - FirebaseRecyclerAdapter - populateViewHolder 不访问数据

android - 如何在Android Compose中使用otf类型的字体文件?

android - 当我只有可选上下文时如何创建 Intent ?

kotlin - 按键列表分组( Kotlin )

java - 位图内存不足问题

android - Kotlin中带有对象的列表的深拷贝

android - onSaveInstanceState 在 onDestroyView 之后调用

kotlin - 不可为 null 的可变映射

android - 使用扩展方法的 Kotlin 数据绑定(bind)

java - 在使用 Kotlin 的方法中抛出异常