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

测试子类B的otherWork方法时父类A的lateinit属性未初始化问题

解决测试B类时忽略父类A的work方法问题

你可以通过Spy B类并Stub父类的work方法来跳过它的实际执行,避免因为父类未初始化的属性报错。具体处理方式如下:

  • 使用Mockk的spyk(或@SpyKBean)创建B类的Spy实例,这样可以拦截它的方法调用
  • 直接Stub父类的work()方法,让它执行空逻辑,这样调用otherWork()时就不会触发原有代码里的p.doSomething()

修改后的测试代码示例(Spring环境下)

@ExtendWith(MockitoExtension::class)
class Test {
    @SpyKBean
    lateinit var b: B

    @Test
    fun t() {
        // 拦截父类的work方法,直接返回不执行原有逻辑
        every { b.work() } returns Unit
        
        // 调用要测试的otherWork方法
        b.otherWork()
        
        // 这里添加你的断言逻辑
    }
}

非Spring环境下的手动Spy写法

@ExtendWith(MockitoExtension::class)
class Test {
    @Test
    fun t() {
        val b = spyk(B())
        every { b.work() } returns Unit
        
        b.otherWork()
        
        // 断言逻辑
    }
}

这样处理后,otherWork()调用work()时会直接执行你Stub的空逻辑,完全跳过父类中依赖未初始化属性的代码,也就不会再出现lateinit property p has not been initialized的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:05:03