`
nanjingjiangbiao_T
  • 浏览: 2595411 次
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

spring和testng的整合

 
阅读更多

项目中用到了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. publicclassTestUserextendsAbstractTestNGSpringContextTests{
  4. @Autowired
  5. UserServiceuserService;
  6. @Test
  7. publicvoidtest_save_user(){
  8. Useruser=newUser();
  9. user.setPassword("123456");
  10. user.setSex(1);
  11. user.setPartyName("test1");
  12. user.setEmail("aa@bb.com");
  13. userService.save(user);
  14. }
  15. @Test
  16. publicvoidtest_inject_factory(){
  17. Assert.assertNotNull(userService);
  18. }
  19. }

其中最重要的就是@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菜单中进行配置

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics