1

同じモックオブジェクトに対して複数のコマンドをチェックできるように検証を拡張したいのですが、動作していません。コンパイルしますが、実行時に各コマンドを同じオブジェクトに対して実行しません。

次のようなことをもっと書くのは避けたいだけです:

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()
}

2 回目の試行:

@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)
}

しかし、それらは機能していません。プレゼンターでメソッドを呼び出さなくても、すべてのテストに合格します。どうすればよいですか?

4

3 に答える 3

3

私は同じ問題を抱えていて、Mockito の周りに Facade を書きました。私のライブラリでは、1 つのモック オブジェクトに関するいくつかの呼び出しを確認できます。

val list = mock(MutableList::class)

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

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

readme を参照してください。役立つかもしれません。

于 2016-02-18T15:59:59.800 に答える
2

私が間違っている場合は修正してください。verify()テストで複数の呼び出しを避けたい。

@Test fun onCreate_loadLoginInfo() {
    // ...

    verify(mockedView).initViews()
    verify(mockedView).setImage(user.photoUrl)
    verify(mockedView).setName(user.name)
    verify(mockedView).setEmail(user.email)
}

2番目のアプローチを少し変更しました:

@Test fun onCreate_loadLoginInfo() {
    // ...

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

fun <T> verifyAll(mock: T, func: (() -> T) -> Unit) {
    func { Mockito.verify(mock) }
}

ご覧のとおり、機能引数を に渡しているfunc()ので、それを適切に使用する必要があります (オブジェクトとしてではなく、関数として使用します)。

于 2016-02-18T15:56:30.923 に答える
0

そのようにすべきです。verify各モック メソッド呼び出しの前に呼び出す必要があります。

于 2016-02-18T14:52:08.860 に答える