JUnit,大家并不陌生,对于普通的项目测试,我们只需要继承TestCase即可,但是对于SSH我们需要考虑到Spring的DI注入,这就需要用到JUnit4注解来测试SSH。
一、为何用JUnit4
我先来说下为什么之前的JUnit的简单继承TestCase的测试不能测试SSH的Web项目,大家都知道,我们启动Web项目时要先启动Tomcat,而在Tomcat的启动过程中会读取SSH的各个配置文件,实例化各个注入的类,所以我们的程序中直接使用注解就可以操作各个类。
但是如果是单击的继承TestCase的类,就缺少了读取配置文件的过程,所以当你调用一个类方法时会出现空指针错误,因为类没有实例化。
二、JUnit4使用
Junit4的特点就是使用注解,简化了我们的测试代码,测试之前,先引入spring-test.jar和junit4.4.jar包。
首先我们可以写一个公共或万能的spring-test的基类,这样需要使用时直接继承即可:
package cn.xkshow.framework.service;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
import org.springframework.stereotype.Service;
import cn.xkshow.framework.dao.hibernate.UniversalDao;
import cn.xkshow.plugins.page.PageList;
import cn.xkshow.plugins.page.Page;
@Service
public class UniversalService {
private UniversalDao universalDao;
public void save(Object entity) {
this.universalDao.save(entity);
}
public void saveOrUpdate(Object entity) {
this.universalDao.saveOrUpdate(entity);
}
public void setUniversalDao(UniversalDao universalDao) {
this.universalDao = universalDao;
}
}
package cn.xkshow.framework.service;
import static org.junit.Assert.*;
import javax.annotation.Resource;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class UniversalServiceTest extends AbstractJUnit4SpringContextTests {
@Resource
protected UniversalService universalService;
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
}
接下来再写一个具体的测试:
package cn.xkshow.core.authorization.service;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Test;
import cn.xkshow.core.authorization.po.Module;
import cn.xkshow.framework.service.UniversalServiceTest;
public class UniversalServiceTureTest extends UniversalServiceTest {
@Test
public void testSave() {
User obj = new User();
obj.setName("张三");
universalService.save();
}
}
OK!