spring配置文件在WEB-INF目录下,测试环境的搭建

    刚到新的公司,新的系统,新的框架,慢慢熟悉之后,很多问题不顺手。
  • 配置信息
    系统基于struts/spring/ibatis。没有测试框架,没有强制编写测试。但一次次忍受Tomcat重起的痛苦后,决定自己搭建测试框架,测试servic/dao。
系统的配置文件布局类似于spring官网JPetstore应用,看过代码的人一定清楚它的布局:
xml 代码
  1. -jpetstore  
  2.     -WEB-INF  
  3.        applicationContext.xml  
  4.        dataAccessContext-local.xml  
  5.        jdbc.properties  
  6.        sql-map-config.xml  

同时,spring为了顺利加载jdbc.properties/sql-map-config.xml,需要在applicationContext.xml调整一下路径
xml 代码
  1. <!-- spring加载ibatis配置文件时的路径设置  -->
  2. <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  3.     <property name="configLocation" value="WEB-INF/sql-map-config.xml"/>  
  4.     <property name="dataSource" ref="dataSource"/>  
  5. </bean>  


其实这样存放配置文件的路径没有什么大碍,至少在Web Server上运行是没问题的。
  • 搭建测试框架
    创建 DaoTestBase继承 AbstractTransactionalDataSourceSpringContextTests
java 代码
 
  1. public class DaoTestBase extends AbstractTransactionalDataSourceSpringContextTests {  
  2.     protected String[] getConfigLocations() {  
  3.         return new String[] {   
  4.                 "classpath*:applicationContext.xml",  
  5.                 "classpath*:dataAccessContext-local.xml",   
  6.                 "classpath*:applicationContext-test.xml" };  
  7.     }  
  8. }  

    测试类继承DaoTestBase,编写测试代码
java 代码
 
  1. public class MyDaoTest extends DaoTestBase {  
  2.     private MyDao myDao;  
  3.   
  4.     public void testCRUD() {  
  5.         // your test code here  
  6.     }  
  7.   
  8.     public void setMyDao(MyDao myDao) {  
  9.         this.myDao= myDao;  
  10.     }  
  11. }  
  • 问题
  1.  运行MyDaoTest 时,提示applicationContext.xml/dataAccessContext-local.xml加载不到。这时候手工将applicationContext.xml/dataAccessContext-local.xml拷贝到classpath目录,文件是加载到了。
  2.     但是在applicationContext.xml/dataAccessContext-local.xml文件中加载jdbc.properties/sql-map-config.xml时,又存在路径问题了。
要解决问题1,其实可以在 DaoTestBase中使用URL改变查找路径的实现方式

java 代码
  1. private static URL appURL = ServiceTestBase.class.getClassLoader().getResource("");  

但这种方式,问题2是解决不了的。除非手工修改
applicationContext.xml/ dataAccessContext-local.xml 中的路径。
  • 解决办法
使用ant,将 applicationContext.xml、 dataAccessContext-local.xml jdbc.properties、sql-map-config.xml拷贝到classpath目录。同时,替换 applicationContext.xml、 dataAccessContext-local.xml 文件的路径属性。大致的代码为:
xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <project name="project-name" default="edit">  
  3.     <property name="src.dir" value="WebRoot/WEB-INF" />  
  4.     <property name="dist.dir" value="WebRoot/WEB-INF/classes" />  
  5.     <property name="spring.xml" value="applicationContext.xml" />  
  6.     <property name="spring-db.xml" value="dataAccessContext-local.xml" />  
  7.     <property name="ibatis.xml" value="sql-map-config.xml" />  
  8.   
  9.     <target name="clean" description="删除dist目录下目标文件">  
  10.         <delete file="${dist.dir}/${spring.xml}" />  
  11.         <delete file="${dist.dir}/${spring-db.xml}" />  
  12.         <delete file="${dist.dir}/${ibatis.xml}" />  
  13.     </target>  
  14.   
  15.     <target name="copy" depends="clean" description="拷贝源文件到目标目录">  
  16.         <copy file="${src.dir}/${spring.xml}" tofile="${dist.dir}/${spring.xml}" encoding="utf-8" />  
  17.         <copy file="${src.dir}/${spring-db.xml}" tofile="${dist.dir}/${spring-db.xml}" encoding="utf-8" />  
  18.         <copy file="${src.dir}/${ibatis.xml}" tofile="${dist.dir}/${ibatis.xml}" encoding="utf-8" />  
  19.     </target>  
  20.   
  21.     <target name="edit" depends="copy" description="修改目标文件的内容">  
  22.         <replace file="${dist.dir}/${spring.xml}" token="WEB-INF/classes/jdbc.properties" value="jdbc.properties" encoding="utf-8" />  
  23.         <replace file="${dist.dir}/${spring-db.xml}" token="WEB-INF/sql-map-config.xml" value="classpath:sql-map-config.xml" encoding="utf-8" />  
  24.     </target>  
  25. </project>  

每次
从cvs获取文件或本地修改spring/ibatis配置文件后,运行当前ant文件。
然后任意的运行你的测试类

运行Oracle速度慢,且受数据库记录影响。所以下一步是加入hsql。

你可能感兴趣的:(spring,sql,xml,Web,ibatis)