当前位置: 首页 > 知识库问答 >
问题:

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

齐泰
2023-03-14

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

对于我的jUnit测试,我希望在我的单元测试类中创建一些虚拟bean,看看我的bean在测试中是否正确地处理它们。然而,我不确定什么是最好的方式来完成这一点。

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)}

有什么办法可以做到这一点吗?

共有1个答案

谢和同
2023-03-14

您需要使内部类静态化;Spring不能将非静态内部类实例化为bean。如果确实有一个合理的理由说明它需要非静态,您可以在@bean方法中手动创建它。

 类似资料:
  • 问题内容: 我试图以编程方式设置一个Spring Boot应用程序上下文根。上下文根的原因是我们希望从中访问该应用,并将所有控制器路径附加到该应用。 这是Web应用程序的应用程序配置文件。 这是主页的索引控制器。 应用程序的新根目录应位于,但仍位于。 我错过了什么导致Spring Boot在请求映射之前不附加上下文根的问题? 问题答案: 你为什么要尝试推出自己的解决方案。Spring-boot已经

  • 问题内容: 我的WEB-INF目录下有一些XML文件: lyricsBaseApp-servlet.xml hibernate.xml dataSource.xml beans.xml servlet xml导入其他xml文件: 我希望我的junit4 类包含整个spring配置。使用默认文件名,我创建了一个文件。最后,我不知道该放在哪里… 我试过了: 要么 和其他一些想法,但都失败了。有人可以指

  • 问题内容: 我正在编写一个实现以下方法的类: 在这种方法中,我希望使用类似于以下内容的配置文件来构造Spring应用程序上下文: 是否可以在配置文件中引用“ dataSource” bean的任何地方强制Spring使用传递给我的方法的DataSource对象? 问题答案: 我发现两个Spring接口可以用来实现我所需要的。该BeanNameAware接口允许Spring通过调用来告诉一个对象的应

  • 我已经在OpenShift上创建了Spring快速启动应用程序,它运行良好,显示了一个用户注册的网页,除了重新启动后它不记得新成员。我在想,这是因为我没有真正的数据库。所以我添加了一个PostgreSQL-9.2墨盒。所以我的问题是如何将postgresql准确地配置到OpenSift Spring应用程序中,以便这个web服务器能够存储重启后持续存在的数据。

  • 如果我错了请纠正我,但看起来Moq只能模拟一个公共类,它有一个公共的无参数构造函数,要模拟的方法是。我并不想让这些类公开可见。我是不是错过了一些与Moq的东西,或者只是不适合我想做的事情? 我想我可以创建一个ClassB实现的接口(例如“ICLASSB”),将其注入ClassA,并模拟该接口。ClassB仍然可以是内部的(尽管我意识到接口方法必须是公共的)。虽然这可以工作,但我对创建大量接口感到不