【问题标题】:spring junit testing春季junit测试
【发布时间】:2011-09-26 16:10:50
【问题描述】:

我有一个 maven spring 项目(最新版本),我想写一些 junit 测试(最新版本)。

我的问题是我的 spring bean 是自动装配的,当我从 junit 测试中调用它们时,我得到空指针异常,因为 spring 不会自动装配它们。

如何加载上下文以便自动装配?

【问题讨论】:

    标签: java unit-testing spring junit


    【解决方案1】:

    您是否学习过 Spring 参考文档中的 Testing 章节?这是您应该从以下示例开始:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration
    public class MyTest {
    
        @Resource
        private FooService fooService;
    
        // class body...
    }
    

    如果您在/src/test/java 中的com.example.MyTest,您将需要/src/test/resources/com/example/MyTest-context.xml - 但例外情况会告诉您方法。

    【讨论】:

    • :-) 我们的代码 sn-ps 我们可疑地相似,我闻到我们都使用相同的引用 ;-)。
    • 谢谢,这行得通,但我使用的是自动接线。 (这是问题,因为我以前没有)。无论如何,主要问题是我不知道如何将我的 applicationContext.xml 从 WEB-INF 获取到所需的根...
    • 这解决了问题:org.apache.maven.pluginsmaven-surefire-plugin${basedir}/src/main/webapp/WEB-INF/
    • @MassiveBoisson:谢谢,正是我想要的。
    【解决方案2】:

    这是一种可能:

    @RunWith(SpringJUnit4ClassRunner.class)
    // ApplicationContext will be loaded from "/applicationContext.xml"
    // in the root of the classpath
    @ContextConfiguration({"/applicationContext.xml"})
    public class MyTest {
    // class body...
    }
    

    通常,为您的测试基础架构设置一个 test-applicationContext 是个好主意。

    【讨论】:

      【解决方案3】:

      您应该在您的测试类上使用SpringJUnit4ClassRunner,并在您的测试类中包含该bean 的字段上使用@Resource(或@Autowired)。您应该考虑使用使用存根的特殊测试上下文 Spring 配置,以便您的测试是真正的单元测试,并且不依赖于整个应用程序上下文。

      【讨论】:

        猜你喜欢
        • 2015-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多