对象实例化时的java.lang.NullPointerException

时间:2014-11-07 11:21:13

标签: java spring unit-testing struts

我的应用程序使用struts和spring框架。我有一个类FormA,其中包含一个自动装配的属性。当我尝试在编写单元测试时实例化它时,我得到一个空指针异常。这是我的代码。

我的班级A:

public class FormA{
    private String propertyOne;
    @Autowired
    private ServiceClass service;

    public FormA(){
    }
}

我的单元测试方法:

@Test
public void testFormA(){
FormA classObj = new FormA();    
}

2 个答案:

答案 0 :(得分:3)

@Autowired仅在Spring管理对象生命周期时有效。

您需要使用@RunWith(SpringJUnit4ClassRunner.class)运行测试,而不是手动实例化FormA,而是使用@Autowired将其注入测试类中。

答案 1 :(得分:1)

当你用new创建一个对象时,autowire \ inject不起作用......

作为解决方法,你可以试试这个:

创建NotesPanel的模板bean

<bean id="notesPanel" class="..." scope="prototype">
    <!-- collaborators and configuration for this bean go here -->
</bean>

以这种方式创建一个istance

applicationContext.getBean("notesPanel");

PROTOTYPE :这可以使单个bean定义包含任意数量的对象实例。

无论如何单位测试应该是

测试类

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration(locations = { "classpath:META-INF/your-spring-context.xml" })
public class UserServiceTest extends AbstractJUnit4SpringContextTests {

    @Autowired
    private UserService userService;

    @Test
    public void testName() throws Exception {
        List<UserEntity> userEntities = userService.getAllUsers();

        Assert.assertNotNull(userEntities);
    }
}

您 - 弹簧 - context.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

    <bean id="userService" class="java.package.UserServiceImpl"/>

</beans>