kotlin - 如何用确切的值调用MockKKt.verify?

标签 kotlin mockk

我们正在迁移与Kotlin接触的类,因此我们需要在Java测试类中模拟Kotlin类。我们使用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。

最佳答案

图书馆做

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

因此,必须指定1才能忽略atLeast

关于kotlin - 如何用确切的值调用MockKKt.verify?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58007306/

相关文章:

kotlin - 继续模拟扩展

java - 在Android Studio-3.6.2中离线安装gradle

spring-boot - Kotlin 和 Spring 启动, transient 属性未正确初始化

android - 如何模拟 android.util.Log

Android 使用 Hilt 使用模拟 ViewModel 测试 Fragmen

java - 使用Mockk模拟Java静态方法时,附件ByteBuddyAgent发生错误

android - RecyclerView Android错误:E/RecyclerView:未连接适配器;跳过布局

android - DateTimeParseException - 无法在索引 15 处进行解析

kotlin - 用 mockk 模拟私有(private)属性(property)抛出异常

android - 模拟 java.lang.AssertionError : Verification failed: call 1 of 1: was not called