说起JUnit,大家并不陌生,我之前也有过简单的介绍(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.jar和annotation.jar都已经引入了),junit4.4.jar一般在spring2.5.6里有,spring-test.jar如果没有可以在这里下载(文章末尾有这两个jar包的下载链接)。
下面是我对userDao的一个查询方法的测试:
import javax.annotation.Resource;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.core.permission.dao.IUserDao;
import com.core.permission.po.User;
//@RunWith(SpringJUnit4ClassRunner.class)用来声明在Spring环境下进行测试
//@ContextConfiguration(locations={……})用来声明配置文件,把项目中所有的关于ssh的配置文件都声明到里面
//(其实只需要声明与你测试相关的即可,为了以后对于action的测试,所以把所有的配置文件都加了进来)
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:com/core/config/hibernate.cfg.xml",
"classpath:com/core/config/springConfig-core.xml",
"classpath:com/core/config/springConfig-dao.xml",
"classpath:com/core/config/springConfig-struts.xml",
"classpath:com/core/config/springConfig.xml",
"classpath:com/core/config/strutsConfig.xml"})
//类名也有限制,要是bean中注入的类的名字
public class userDao {
//@Resource(name="userDao")代表根据名称来查找配置文件,userDao即为配置文件中的名称
@Resource(name="userDao")
private IUserDao<Long, User> userDao;
//@Test注解代表测试用例默认的测试方法,启动时默认执行该方法
@Test
public void userTest() {
User u = userDao.findUserAll().get(0);
System.out.println("用户的id=" + u.getId());
}
}
测试结果:
说到底使用JUnit4对SSH的测试特殊之处就在于对Spring的配置文件的读取,原本Spring有自身封装的解析功能,我们测试不想启动服务器就只能使用JUnit4来帮助我们去读取,当然,对于Spring的读取不仅仅这一种方式,还望大家说一说自己的经验,一同交流。