SPRING 发布有测试工具包 spring-test-4.0.4.RELEASE.jar, 用于单元测试。
WEB项目测试的关键点在于 SPRING 配置文件的加载。
(说明:不是测试 spring MVC 的 Controller)
具体实例:
准备测试类: AppUserManage.java, 配置为SPRIGN bean.
新建JUNIT4的测试类: AppUserManageTest.java
关键配置如下:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:conf/spring-core.xml",
"classpath:conf/spring-mvc-servlet.xml",
"classpath:conf/spring-hibernate.xml",
"classpath:conf/spring-hibernate_app.xml" })
@Transactional
@TransactionConfiguration(transactionManager = "transactionManager_app", defaultRollback = true)
最重的配置是加载SPRING 的配置文件。
加载SPRING 的配置文件,有很多重加载方法
(1)直接加载文件的:
@ContextConfiguration({"file:WebContent/WEB-INF/classes/conf/*.xml" })
加载的位置,可以是发布后的 classes 下的文件,也可以是源文件,因为是直接加载文件,所以路径可以自已定。
(2)通过 spring classpath 加载的。
这种方法加载时,从Web发布后的文件中加载,不是从源文件中加载,加载时,可以只加载测试必须的文件。
@ContextConfiguration(locations = { "classpath:conf/spring-core.xml",
"classpath:conf/spring-mvc-servlet.xml",
"classpath:conf/spring-hibernate.xml",
"classpath:conf/spring-hibernate_app.xml"})
(3)Hibernate的配置加载
涉及数据库测试时,需要加载Hibernate的配置文件。最主要的时Hbm文件的加载(如果采用XML方法配置的话)。
配置示例:
<mapping resource="com/onedollar/virtualnurse/baseservice/hibernate/platform/Street.hbm.xml" />
(4).properties 文件的加载
如果涉及使用.properties 配置文件,其路径也需要采用 classpath 方法配置。
<!-- 加载自定义配置文件 -->
<bean id="myPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:conf/self.properties</value>
</property>
<property name="fileEncoding" value="utf-8" />
</bean>
(5)如果报 servletContent 错误,一般情况下,是servlet-api.jar 没有引入的原因,在Tomcat等容器中运行正常,是因为这个Jar包在Tomcat/lib 目录中存在。
JUNIT4 测试时,是脱离Tomcat等容器的,所以会报错。
(6)事务的配置很简单, 网上有很多的介绍。
(7)测试Bean的引用
@Resource(name = "appUserManage")
private AppUserManage appUserManage;
然后就可以直接使用。
(8)主要 import
import static org.junit.Assert.fail;
import javax.annotation.Resource;
import junit.framework.Assert;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;