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

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访问数据库类似的配置。

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

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥15 绘制多分类任务的roc曲线时只画出了一类的roc,其它的auc显示为nan
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?