现正开发一个FLEX+JAVA的项目,后台持久层是IBATIS,利用MAVEN管理。后台的manager,logic,dao的依赖关系都写在web工程下的WEB-INF/bean.xml里。
但是为了实现DAO层或者Logic层的单元测试,就必须把依赖关系写到对应层的资源目录下。
于是打算把bean.xml进行分割,简记如下:
  DAO层:applicationContext-persist.xml
      ...
<bean id="getNonConcurrentDAO"
     class="com.xxx.dao.customize.GetNonConcurrentDAOImpl">
      <property name="sqlMapClient" ref="sqlMapClient" />
</bean>
      ... LOGIC层:applicationContext-logic-master.xml
      ...
<bean id="concurrentCheckLogic"
class="com.xxx.logic.impl.ConcurrentCheckLogic">
<property name="transactionManager" ref="transactionManager" />
<property name="getNonConcurrentDAO" ref="getNonConcurrentDAO"/>
</bean>
      ...
可是用TestNG测试的时候出了问题,找不到getNonConcurrentDAO。
必须得把DAO层的applicationContext-persist.xml拷贝到LOGIC层的资源目录下才可以。想请教大家,问题出在了哪里?怎么解决?针对单元测试有没有什么解决的办法。

解决方案 »

  1.   

    单元测试跟maven关系不大吧,我做测试的时候都用junit,然后把spring相关配置文件拿出来放到单元测试目录,程序中获取Spring Bean
    ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(
    new String[] { "DAO.xml", "SERVICE.xml" }); TrubyService service = (TrubyService) appContext
    .getBean("trubyService ");
      

  2.   

    谢谢你的回复。
    但是,spring的配置文件也是一部分测试内容,所以我觉得应该尽量保持各层的独立性进行测试。我觉得比较奇怪的一点是:DAO层生成了JAR包后,这些依赖关系就应该指明了啊,logic层为什么不能直接调用呢?怎么写才是对的呢?