使用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
相关产品推荐
相关产品推荐

