Spring Kotlin将object改为@Component类后测试初始化报no companion object错误如何解决
错误原因
MyLoader是接口类型,无法直接将接口类名作为实例传入构造方法,必须传入实现了该接口的类的实例。
解决方法
方案1:匿名实现类(快速验证场景)
直接在传参时构造匿名内部类实现MyLoader接口,无需额外定义类:
val cut = SomeHelper( anAttribute = AnAttributeService( myLoader = object : MyLoader { override fun loadSomething() { // 按需补充逻辑,测试场景可留空 } } ) )
方案2:Mock接口(单元测试场景)
单元测试场景无需写实际实现逻辑,可通过Mock框架直接生成Mock实例,以MockK为例:
// 生成Mock实例 val mockLoader = mockk<MyLoader>() // 按需指定方法行为,无特殊要求可省略 every { mockLoader.loadSomething() } just Runs // 构造目标类 val cut = SomeHelper( anAttribute = AnAttributeService(myLoader = mockLoader) )
方案3:正式实现类(生产运行场景)
生产环境需要实际业务逻辑时,先定义MyLoader的实现类,再传入实例:
// 定义实现类 @Component class MyLoaderImpl : MyLoader { override fun loadSomething() { // 编写实际业务逻辑 } } // 初始化时传入实现类实例 val cut = SomeHelper( anAttribute = AnAttributeService(myLoader = MyLoaderImpl()) )
补充说明:如果是Spring运行环境,不需要手动构造这些Bean,依赖注入会自动完成装配,直接通过
@Autowired注入SomeHelper即可使用。
内容的提问来源于stack exchange,提问作者inconnu
相关产品推荐
相关产品推荐

