用Junit测试非常方便,但有时我们想要看日志来方便排除,使用spring+log4j时,用Junit测试看日志很多人都不太会,即如何将Junit与log4j进行整合。

我也是研究了半天,才终于找到了方法,特此拿来与大家分享下。

  Junit+spring+log4j整合之所以麻烦,是因为spring与log4j的整合,是放在web.xml里的,随tomcat启动后,spring才会加载log4j,而用junit测试是不需要tomcat启动的,所以Junit与log4j的整合才比较费劲。Junit使用spring时,若spring没加载到log4j就会报以下警告!

log4j:WARN No appenders could be found for logger (org.springframework.test.context.junit4.SpringJUnit4ClassRunner).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

1. 最简单最笨的方法

将log4j放到src根目录下,这是由于spring加载log4j默认从src目录里找。Junit代码如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:com/config/springConfig.xml" })
@Transactional
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class TestHibernate {
...
}
  这种方法,虽然直接简单,但很多项目中喜欢把所有配置文件进行统一管理并分类汇总到不同的文件夹下,例如:将所有配置文件放到com.config包下。那么测试的时候就还得手动将log4j.properties或log4j.xml移动到根目录下,但这么做,项目简单还行,如果是大型项目,需要加载很多配置文件时,还是恨麻烦也容易出问题的。因此并不推荐。

2. 推荐方法

新建JUnit4ClassRunner类。Junit代码如下:

public class JUnit4ClassRunner extends SpringJUnit4ClassRunner {

    static {
try {
Log4jConfigurer.initLogging("classpath:com/config/log4j.properties");
} catch (FileNotFoundException ex) {
System.err.println("Cannot Initialize log4j");
}
} public JUnit4ClassRunner(Class<?> clazz) throws InitializationError {
super(clazz);
} }
@RunWith(JUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:com/config/springConfig.xml")
@Transactional
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class TestHibernate {
...
}

  这样,在启动Junit测试时,spring就会加载log4j了。而且保持了灵活性。

PS:Junit加载spring的runner(SpringJUnit4ClassRunner)要优先于spring加载log4j,因此采用普通方法,无法实现spring先加载log4j后被Junit加载。所以我们需要新建JUnit4ClassRunner类,修改SpringJUnit4ClassRunner加载log4j的策略。这样加载log4j就会优先于加载spring了。
---------------------
作者:wangpeng047
来源:CSDN
原文:https://blog.csdn.net/wangpeng047/article/details/20375413
版权声明:本文为博主原创文章,转载请附上博文链接!

最新文章

  1. Git使用出错:Couldn‘t reserve space for cygwin‘s heap, Win32
  2. git之三
  3. css 数字出现滚动条解决
  4. Crystal Reports 2008(水晶报表) 启动时检查更新
  5. Upload file
  6. iBoxDB for .NET v1.5发布, 移动NoSQL数据库
  7. 关于解决form表单记录上次保存填写记录清空
  8. aspx页面记住密码
  9. Frank自动化测试
  10. hibernate 单元测试 5.2
  11. opencart配置United States Postal Service快递
  12. Java学习笔记——浅谈数据结构与Java集合框架(第二篇、Queue、Set)
  13. PHP启动:动态库加载失败(PHP Warning: PHP Startup: Unable to load dynamic library &#39;/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/*.so&#39;)
  14. Light OJ 1011
  15. matlab中如何将视频保存成图像
  16. CH 1401 - 兔子与兔子 - [字符串hash]
  17. bzoj4183: tree
  18. 主流服务器apache,iis,tomcat,jboss,resion,weblogic,websphere的区别
  19. mysql的逻辑结构
  20. Java常用的类 包 接口

热门文章

  1. TensorFlow简单线性回归
  2. Hash源码注释解析
  3. P5960 【模板】差分约束算法
  4. 听说你还不知道Spring是如何解决循环依赖问题的?
  5. 聊一聊 Spring Boot 中 RESTful 接口设计规范
  6. 【题解】Luogu P3123 [USACO15OPEN]贝茜说哞Bessie Goes Moo
  7. C#调百度通用翻译API翻译HALCON的示例描述
  8. 一次 RocketMQ 顺序消费延迟的问题定位
  9. 地图可视化神器keplergl新增对jupyter lab 3.0的支持
  10. 通过Cloudflare API进行CDN刷新