You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用mockkConstructor时MockK调用实际方法的问题求助

解决MockK模拟构造函数时触发真实方法的问题

你遇到的问题根源是:MockK默认以**部分mock(Partial Mock)**模式模拟构造函数,此时未被Stub的方法会执行真实逻辑。在定义every规则时,调用anyConstructed<TestConstructed>().justThrows()会触发真实方法抛出异常,导致测试失败。

解决方法一:使用Relaxed模式模拟构造函数

在调用mockkConstructor时添加relaxed = true参数,这样所有方法默认返回对应类型的默认值(如Int返回0),不会执行真实逻辑,之后再通过every指定特定方法的行为。

修改后的完整代码:

class TestConstructed() {
    fun justThrows(): Int {
        throw NotImplementedError()
    }
}

class MinimalExample {
    @Test
    fun testMockConstructor() {
        mockkConstructor(TestConstructed::class, relaxed = true)
        every { anyConstructed<TestConstructed>().justThrows() } returns 42

        val constructed = TestConstructed()

        assertThat(constructed.justThrows()).isEqualTo(42)
    }
}

补充方案:直接Mock单个实例(非构造函数模拟)

如果不需要全局模拟构造函数,仅需针对单个实例Stub行为,可直接创建纯Mock实例:

class MinimalExample {
    @Test
    fun testMockInstance() {
        val mockInstance = mockk<TestConstructed>()
        every { mockInstance.justThrows() } returns 42

        assertThat(mockInstance.justThrows()).isEqualTo(42)
    }
}

内容的提问来源于stack exchange,提问作者cgledezma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 17:12:54