我的应用程序使用struts和spring框架。我有一个类FormA
,其中包含一个自动装配的属性。当我尝试在编写单元测试时实例化它时,我得到一个空指针异常。这是我的代码。
我的班级A:
public class FormA{
private String propertyOne;
@Autowired
private ServiceClass service;
public FormA(){
}
}
我的单元测试方法:
@Test
public void testFormA(){
FormA classObj = new FormA();
}
答案 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>