分享

spring和testng的整合

 埃德温会馆 2014-12-07

项目中用到了testNG作为单元测试工具,至于testNG对比junit有啥好处不太清楚,至少从程序员写testcase来说似乎和junit 4.x并没有太大的区别。但是据说和一些测试工具整合的时候比较方便。ok,这不是重点。

 

Spring专门为Junit testNG提供了一套测试集成接口类——AbstractSpringContextTests类,对于testNG就是其子类:AbstractTestNGSpringContextTests。Spring和testNG整合后,进行单元测试的时只要test类继承该类,就可以方便的使用spring注入。实现了spring和testNG的无缝整合,我们可以像写普通类那样测试被spring IoC容器所管理的类(否则我们必须在开始执行单元测试前重新加载Spring beanfactory,再用getBean("xxx")的方式获取IoC容器中类。)

 

除此以外,对测试类spring beanfactory缓存,使得多个测试类之间可以共享同一个的beanfactory实例,从而减少了重复生成beanfactory,提高了运行效率。

 

继承该类的测试用例在spring管理的事务中进行,测试完后对数据库的记录不会造成任何影响。你对数据库进行一些操作后,它会自动把数据库回滚,这样就保证了你的测试对于环境没有任何影响

 

 

 

集成代码如下


  1. @ContextConfiguration   
  2. (locations={"applicationContext.xml"})  
  3. public class TestUser extends AbstractTestNGSpringContextTests{  
  4.    
  5.  @Autowired  
  6.  UserService userService;  
  7.    
  8.  @Test  
  9.  public void test_save_user(){  
  10.   User user = new User();  
  11.   user .setPassword("123456");  
  12.   user .setSex(1);  
  13.   user .setPartyName("test1");  
  14.   user .setEmail("aa@bb.com");  
  15.   userService.save(user);  
  16.  }  
  17.    
  18.  @Test  
  19.  public void test_inject_factory(){  
  20.   Assert.assertNotNull(userService);  
  21.  }  
  22. }  

 

 

其中最重要的就是@ContextConfiguration。默认的从classpath目录下读取applicationContext.xml作为spring的启动配置文件(对应ClassPathXmlApplicationContext?)。
等同于(locations={"classpath:applicationContext1.xml"})。因此必须确保spring的配置文件在classpath中。
如果有多个spring配置,用逗号进行分隔(locations={"applicationContext.xml", "/applicationContex_transaction.xml"})

 

另外一种采用filepath定位spring配置文件(对应FileSystemXmlApplicationContext?).
比如在web项目中将相应的配置文件放到WEB-INF目录下"file:WebRoot/WEB-INF/config/applicationContext.xml",或者可以指定绝对路径。

 

 

 

实际问题:

项目中,将配置放在了web-inf/config/目录下对应的xml文件中,但是又在xml文件中对web-inf/config/properties/目录下的几个包括log4j.properties在内的几个properties文件进行了引用。

 

如果使用file方式指定spring配置文件位置的话,当加载到xml文件中引用的property文件时就会报文件找不到。因为仅仅指定采用file方式读取xml文件,对于对于property文件仍然会去classpath搜索。

 

 

解决方法

将Webroot加入到项目的classpath目录中。

或者更好的做法是指定在运行testNG测试时,将webroot加入到classpath中。

 

Eclipse中 run/run configuration菜单中进行配置

  MyEclipse配置

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多