weixin_42395607 2010-09-15 10:41
浏览 898
已采纳

Spring Mock读取配置文件

在Spring3.0中我使用AbstractTransactionalJUnit38SpringContextTests来作为测试类的父类.

使用@ContextConfiguration来读取配置文件.

我的配置文件在/WEB-INF/config/spring/applicationContext.xml.

在web.xml中写

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/config/spring/applicationContext.xml</param-value>
</context-param>

 没问题,可以读到.

但是在测试类中写

@ContextConfiguration("/WEB-INF/config/spring/applicationContext.xml")

 就会报错,class path resource [WEB-INF/config/spring/applicationContext.xml] cannot be opened because it does not exist

这是因为他是默认从classpath中读配置文件,但是我的配置文件不在classpath下.

好,改成这样写

@ContextConfiguration("file:WebContent/WEB-INF/config/spring/applicationContext.xml")

 applicationContext.xml可以读到了.

但是我还配置了IBatis的sqlMapClient,要读配置文件/WEB-INF/config/ibatis/SqlMapConfig.xml.

原来在Spring的配置文件里,这样写,

   <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"
        p:configLocation="/WEB-INF/config/ibatis/SqlMapConfig.xml"
        p:dataSource-ref="dataSource" />

 没问题,可以读到,但是@ContextConfiguration里不行,

同样是报class path resource [WEB-INF/config/ibatis/SqlMapConfig.xml] cannot be opened because it does not exist.

好吧,我再改成

   <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"
        p:configLocation="file:WebContent/WEB-INF/config/ibatis/SqlMapConfig.xml"
        p:dataSource-ref="dataSource" />

 OK,都读的到了,可以进行测试了.

但是,正常启动服务器时,读取配置文件时,

却报错,java.io.FileNotFoundException: WebContent\WEB-INF\config\ibatis\SqlMapConfig.xml (The system cannot find the path specified).

如果写完整路径,即"盘符+路径"是可以读到的,这样明显不现实.

发现测试是用org.springframework.test.context.support.AbstractContextLoader来读取配置文件的,难道做过什么优化?

所以,我的问题是,我的所有配置文件都没放在classpath下,我该怎么写,才能保证启动服务器和进行测试时都能读的到?

 

  • 写回答

1条回答

  • yznkaixin 2010-09-15 16:32
    关注

    没有去细看你的问题。
    我有个建议。

    尽量让配置文件分成:product和test版本。

    单元测试就用applicationContext-test.xml
    这个可以放在classpath下的,没任何问题。

    对应的都单独test配置文件。

    直接使用生产环境的配置文件来测试不是一个很好的习惯呢。
    特别是生产环境会存在大量的 变量properties以及JNDI访问数据库类似的配置。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)
  • ¥50 400g qsfp 光模块iphy方案
  • ¥15 两块ADC0804用proteus仿真时,出现异常