博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring_Junit单元测试使用log4j输出日志
阅读量:5829 次
发布时间:2019-06-18

本文共 1836 字,大约阅读时间需要 6 分钟。

 

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放到特定目录下,指定加载配置文件位置。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类:

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了。

 

转载于:https://www.cnblogs.com/gscq073240/articles/7019360.html

你可能感兴趣的文章
串结构练习——字符串匹配
查看>>
linux下输入密码不回显
查看>>
《构建之法》读书笔记
查看>>
拿下阿里、头条、滴滴的offer后谈谈面试经验---动身前看一看
查看>>
android开发(49) android 使用 CollapsingToolbarLayout ,可折叠的顶部导航栏
查看>>
【ERP】如何在多行数据块中实现仅能勾选唯一的主联系人
查看>>
Oracle 数据库优化的R方法(Method R)
查看>>
CentOS最小化安装系统开启网卡
查看>>
互联网+升级到智能+ 开启万物智联新时代
查看>>
Linux文本编辑器之Nano
查看>>
【原】IOS中KVO模式的解析与应用
查看>>
理解 QEMU/KVM 和 Ceph(3):存储卷挂接和设备名称
查看>>
[MFC] CList
查看>>
[Android Pro] 完美Android Cursor使用例子(Android数据库操作)
查看>>
c++中sizeof的分析
查看>>
线程间操作无效: 从不是创建控件的线程访问它的解决方法
查看>>
hdu 1236 排名
查看>>
PHP面向对象深入研究之【继承】,减少代码重复
查看>>
RBAC权限管理
查看>>
此博客不再发表对自己私事的看法
查看>>