测试子类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
相关产品推荐
相关产品推荐

