Как вызвать MockKKt.verify со значением точно? - PullRequest
1 голос
/ 19 сентября 2019

Мы находимся в процессе переноса классов, которых мы касаемся, в Kotlin, поэтому нам нужно смоделировать классы Kotlin в тестовых классах Java.Мы используем io.mockk:mockk:1.9.3.

Чтобы проверить вызов хотя бы x раз, у нас есть метод-оболочка

public static void verify(MockkVerifier verifier, int atLeast) {
    MockKKt.verify(Ordering.UNORDERED, false, atLeast, Integer.MAX_VALUE, -1, 0, mockKVerificationScope -> {
        verifier.verify(mockKVerificationScope);
        return Unit.INSTANCE;
    });
}

, который отлично работает.Однако для метода, заключающего в себе функциональность ровно n вызовов, моя единственная идея

public static void verifyExactly(MockkVerifier verifier, int exactly) {
    MockKKt.verify(Ordering.UNORDERED, false, exactly, Integer.MAX_VALUE, exactly, 0, mockKVerificationScope -> {
        verifier.verify(mockKVerificationScope);
        return Unit.INSTANCE;
    });
}

терпит неудачу из-за

io.mockk.MockKException: specify either atLeast/atMost or exactly

    at io.mockk.MockKDsl.internalCheckExactlyAtMostAtLeast(API.kt:153)
    at io.mockk.MockKDsl.internalVerify(API.kt:113)
    at io.mockk.MockKKt.verify(MockK.kt:139)
    [...]

, когда я вызываю метод с 1 для exactly.

Я вижу, что это хорошая идея в Kotlin, так как я могу использовать именованные аргументы там, однако я не могу перевести решение на Java.

1 Ответ

1 голос
/ 19 сентября 2019

Библиотека выполняет

if (exactly != -1 && (atLeast != 1 || atMost != Int.MAX_VALUE)) {
    throw MockKException("specify either atLeast/atMost or exactly")
}

Таким образом, необходимо указать 1, чтобы игнорировать atLeast.

...