kotlin/mockito:无法模拟重新调整布尔值的方法

问题描述 投票:0回答:1

我在尝试模拟方法时遇到问题

  • 暂停
  • 有上下文
  • 返回原语

示例(使用mockito-kotlin 5.2.1、mockito-core 5.11.0、kotlin 1.9.23、kotest-assertions-core 5.6.2)

class TheBug {

    @Test
    fun test(): Unit = runBlocking{

        val service = mock<MyService> {
            onBlocking {
                with(any<MyContext>()) {
                    myMethod()
                }
            }.doReturn(true)
        }

        with(MyContext("toto")) {
            service.myMethod() shouldBe true
        }
    }
}

class MyService {

    context(MyContext)
    suspend fun myMethod(): Boolean {
        return true
    }
}

data class MyContext(val string: String)

测试结果是

java.lang.NullPointerException: Cannot invoke "java.lang.Boolean.booleanValue()"

如果方法

  • 没有被暂停,
  • 或者不需要上下文
  • or 返回数据类而不是布尔值 然后它就按预期工作了

知道如何绕过它吗? 不想因此删除一些单元测试......

kotlin mockito coroutine kotlin-context-receivers
1个回答
0
投票

升级到 kotlin 2.0 后此问题已修复

© www.soinside.com 2019 - 2024. All rights reserved.