1

我在测试 Spring Junit 测试配置时收到 NullPointerException。问题在于使用 @ContextConfiguration 和 @Autowired 注释。

当我实例化上下文并直接获取对 bean 的引用时,如测试方法中注释掉的代码所示,测试运行正确并成功。但是,当我尝试使用具有相同 XML 文件属性的 @ContextConfiguration 和 @autowired 注释时,我的 assertEquals 语句中出现 NullPointerException。你知道我做错了什么吗?

package com.greathouse.helloworld.HelloWorldTest;

import javax.inject.Inject;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import junit.framework.TestCase;

@ContextConfiguration(locations = {"classpath:/resources/application-config.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest extends TestCase
{
    @Autowired
    MessageService messageService;

    @Test
    public void testApp()
    {
        //ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/resources/application-config.xml");
        //messageService = context.getBean("printMessage", MessageService.class);
        assertEquals( messageService.getMessage(), "Hello World" );
    }
}
4

2 回答 2

7

看起来 messageService 没有自动装配。如果您根据需要放置 messageService 会有所帮助。

@Autowired( required = true )

这样当 spring 上下文启动时 spring 会告诉你为什么它没有自动装配你的组件。另外作为旁注,由于您使用的是 JUnit 4,因此您的测试不需要从 TestCase 扩展。

于 2012-11-09T14:50:58.943 回答
0

您的字段 messageService 未初始化 - 您应该再次取消注释 context.getBean-line。

于 2012-11-09T05:46:34.337 回答