当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

Junit单元测试使用log4j输出日志

发表于: 2015-01-13   作者:coffee_yan   来源:转载   浏览次数:
摘要:       Junit+spring+log4j整合之所以麻烦,是因为spring与log4j的整合,是放在web.xml里的,随tomcat启动后,spring才会加载log4j,而用junit测试是不需要tomcat启动的,所以Junit与log4j的整合才比较费劲。Junit使用spring时,若spring没加载到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类:
    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了。

Junit单元测试使用log4j输出日志

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
AndroidTestCase 如果对要存取资源或者其他一些依赖于Activity上下文的操作进行单元测试,则需扩展A
​【声明】 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章
1. 基本上Eclipse和Myeclipse 下的配置都差不多。 以下讲的是Myeclipse8.6下怎么配置: Myeclipse8.
我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序
本章要点: 1、日志输出 2、单元测试 3、程序Debug 1、日志输出 打开eclipse,选择“Windows”—>
创建一个测试项目,在项目中新建一个类CaculateService和一个测试类CaculateServiceTest,在andriod
转自:http://blog.csdn.net/andycpp/article/details/1327147 我们在编写大型程序的时候,需要写成
使用JUnit测试一个应用程序 现在已经准备好测试JN_test应用程序。为了测试,还需要使用JUnit Wizard
使用JUnit测试一个应用程序 现在已经准备好测试JN_test应用程序。为了测试,还需要使用JUnit Wizard
我们在编写大型程序的时候,需要写成千上万个方法或函数,这些函数的功能可能很强大,但我们在程序
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号