加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何将内部类添加到Spring应用程序上下文进行单元测试?

发布时间:2020-12-15 01:39:18 所属栏目:大数据 来源:网络整理
导读:我有一个bean,其业务逻辑从ApplicationContext加载某种类型的bean,以便处理它们. 对于我的jUnit测试,我想在我的单元测试类中创建一些虚拟bean,看看我的测试中的bean是否正确处理它们.但是,我不确定实现这一目标的最佳方法是什么. 如果我只是在我的测试类中声

我有一个bean,其业务逻辑从ApplicationContext加载某种类型的bean,以便处理它们.

对于我的jUnit测试,我想在我的单元测试类中创建一些虚拟bean,看看我的测试中的bean是否正确处理它们.但是,我不确定实现这一目标的最佳方法是什么.

如果我只是在我的测试类中声明我的内部类,Spring将不会将它作为其应用程序上下文的一部分.我意识到我可以在我的jUnit类中注入我的应用程序上下文,然后使用appContext.registerPrototype()来添加它,但是,我认为可能有一种更清晰的方式使用注释.

我试图用@Component注释内部类,但不出意外,它没有用.

public class PatchEngineTest extends TestBase {
    @Component
    protected class Patch1 extends PatchBaseImpl implements Patch{
        public void applyPatch() throws Exception {
            // does nothing
        }
    }


    @Autowired PatchRepository patchRepository;
    @Autowired Patch1 patch1;

    @Test
    public void test() {
        fail("Not yet implemented");
    }

}

毫不奇怪,我收到以下错误消息:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.ia.patch.PatchEngineTest$Patch1] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

有没有办法做到这一点?

最佳答案
你需要让你的内部类静态; Spring不能将非静态内部类实例化为bean.如果确实存在需要非静态的正当理由,则可以在@Bean方法中手动创建它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读