一般情况下,我们的测试类是继承自抽象类AbstractDependencyInjectionSpringContextTests,需要注意的就是要重写方法getConfigLocation()。这样的测试类有个优点就是每个测试方法Spring容器都只对beans初始化一次。
但是,有些情况下我们不想在单元测试的时候破坏数据库现场,这时候可以是测试类继承抽象类AbstractTransactionalSpringContextTests。使用这个抽象类的时候,一定要注意属性TransactionManager属性的注入,以及TransactionManager的DataSource属性的注入,否则测试类是不能够初始化的
public abstract class BaseTest extends AbstractDependencyInjectionSpringContextTests {
@Override
protected String[] getConfigLocations() {
String[] config = new String[]{
"file:web/WEB-INF/spring.xml",
"file:web/WEB-INF/spring-app.xml"
};
return config;
}
@Override
protected void injectDependencies() throws Exception {
this.setAutowireMode(AUTOWIRE_BY_NAME);
super.injectDependencies();
}
}
如果需要测试某个bean,我们可以继承上面的BaseTest类
public class TestNeiDAOImpl extends BaseTest{
Log log = Log.getLog(TestNeiDAOImpl.class);
NeiDAO neiDAO ;
UserInfo userInfo;
public void testAddUserInfo(){
userInfo.setAge(20);
userInfo.setRegisterTime(new Date());
userInfo.setUpdateTime(new Date());
neiDAO.addUserCore(userInfo);
}
//通过setter方法自动从context里注入neiDAO bean,而不用显示调用
public void setNeiDAO(NeiDAO neiDAO){
this.neiDAO = neiDAO;
}
}
我们不需要手动的从applicationContext容器中找某个bean,spring自动通过sett方法注人我们需要的bean。需要注意的是,如果我们有多个 bean的类型一样,这样就需要我们手动获取
public void onSetUp() {
neiDAO= (NeiDAO) applicationContext.getBean("neiDAO");
}
如果需要使用spring的单元测试,我们还需要导入spring test的jar包。