Мы находимся в процессе переноса классов, которых мы касаемся, в 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.