`
coffee_yan
  • 浏览: 36360 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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类:
    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了。
0
1
分享到:
评论

相关推荐

    Junit+log4j+slf4j

    将JUnit、log4j和SLF4J结合使用,开发者可以在开发过程中方便地进行单元测试,并通过SLF4J调用底层的日志框架(如log4j)记录测试和应用运行过程中的日志信息。这有助于调试、性能分析和问题定位,从而提高软件质量...

    Hibernate4+SpringMVC+Junit4+log4j环境搭建Jar包

    这里我们关注的是基于Java技术栈的Web应用环境,具体包括Hibernate4、SpringMVC、JUnit4和log4j这四个核心组件。下面将详细介绍这些组件以及如何整合它们进行环境搭建。 **1. Hibernate4** Hibernate是一个开源的...

    SpringBoot第 3 讲:SpringBoot+Junit+Log4J

    在本讲中,我们将深入探讨如何在SpringBoot项目中整合JUnit测试框架以及Log4J日志系统。SpringBoot简化了Java应用的开发流程,而JUnit是广泛使用的单元测试工具,Log4J则是一款强大的日志记录框架。让我们一起了解...

    springmvc5+hibernate5+junit4+log4j2整合实例

    在本整合实例中,我们将探讨如何将Spring MVC 5、Hibernate 5、JUnit 4 和 Log4j2 集成在一起,以构建一个高效、可测试和日志记录完善的Java Web应用程序。以下是对这些技术及其整合过程的详细说明: **Spring MVC ...

    spring3_junit4.10_log4j

    标题 "spring3_junit4.10_log4j" 暗示了这是一个关于整合Spring 3.0框架、JUnit 4.10测试库以及Log4j日志框架的项目。描述中提到,Spring 3.0需要JUnit 4.5以上的版本,而JUnit 4.10在实际应用中表现良好,同时也...

    poi-3.6-20091214.jar commons-logging-1.1.jar junit-3.8.1.jar log4j-1.2.13.jar

    "log4j-1.2.13.jar"是Log4j的一个版本,Log4j是一个广泛使用的Java日志框架,提供灵活且强大的日志记录功能。1.2.13是该框架的旧版本,虽然有更新的版本如Log4j 2可用,但很多遗留系统仍可能依赖于这个版本。Log4j...

    hibernate+slf4j+log4j+junit包

    在Java开发领域,Hibernate、SLF4J、Log4j以及JUnit是四个非常重要的库,它们各自服务于不同的目的,但又常被一起使用以构建高效、可维护的项目。让我们来详细了解一下这些技术和它们在软件开发中的作用。 1. ...

    log4j,Junit 学习

    2. **配置文件**:Log4j 的核心是通过配置文件(通常是 log4j.properties 或 log4j.xml)来设定日志行为,包括日志输出位置、格式和级别等。 3. **Appenders**:Appenders 是 Log4j 中用于输出日志的地方,如控制台...

    Netbeans实现SpringMVC+Maven+Junit+Mybites+log4J+MySQL实现数据库增删改

    在`log4j.properties`配置文件中,我们可以设置不同的日志级别和输出目标,以便于调试和监控。 综上所述,这个项目通过集成上述技术,创建了一个功能完备的Java Web应用,它不仅能够与MySQL数据库进行交互,还具备...

    (正式)Java之JUnit, Log4J, Ant, HttpClient, ApacheCommons

    【标题】中的知识点主要涉及Java开发中常用的四个库和一个构建工具,它们分别是JUnit、Log4J、Ant、HttpClient和Apache Commons。这些组件在Java软件开发中起着至关重要的作用。 1. JUnit:JUnit是Java编程语言的一...

    ssm+log4j+JUnit(eclipse)

    6. **日志配置**:配置Log4j的`log4j.properties`,指定日志输出的级别和目的地。 7. **编写JUnit测试**:为业务逻辑编写测试类,使用JUnit注解进行测试。 最后,启动Tomcat服务器,运行项目,你将拥有一个基于SSM...

    log4j简单例子

    这可能是一个简单的测试项目,展示了如何在Junit测试用例中使用Log4j进行日志记录。 **详细说明**: 1. **配置Log4j**:Log4j的配置文件通常包含在项目的类路径下,其中定义了日志输出的级别(如DEBUG, INFO, WARN...

    junit-4.10.jar,spring3,log4

    Log4j允许开发者控制日志信息的输出级别,如DEBUG、INFO、WARN、ERROR和FATAL,还可以自定义日志输出格式,甚至将日志信息输出到不同的目的地,如控制台、文件、数据库等。在Spring框架中,可以通过配置log4j....

    ElasticSearch 5.4 的测试java工程 依赖包很全 有配置好的log4j

    - **log4j.properties或log4j.xml**:配置文件定义了日志级别(DEBUG, INFO, WARN, ERROR等)、输出目的地(控制台、文件、网络等)以及日志格式。 - **定制化配置**:可以根据需求调整日志级别,例如在开发阶段设置...

    mybatis源码+练习代码+插件+log4j2+maven

    【标题】"mybatis源码+练习代码+插件+log4j2+maven" 提供的资源包是一个综合的学习资料集合,旨在帮助用户深入理解MyBatis这一流行持久层框架,同时涵盖日志管理工具Log4j2和项目构建工具Maven。以下是这些组件的...

    log4jdemo包

    标题"Log4jDemo包"指的是一个使用Java编写的演示项目,主要目的是展示如何配置和使用Log4j日志框架。Log4j是Apache的一个开源项目,广泛应用于Java应用程序中,用于记录程序运行时的各类日志信息。这个Demo将帮助...

    jxl.jar;dom4j.jar;jsonplugin-0.34.jar;junit-3.8.2.jar;log4j-1.2.14.jar;struts2-codebehind-plugin-2.0

    这些库的组合表明这是一个可能用于企业级Java Web开发的环境,涵盖了数据处理(jxl)、XML操作(dom4j)、JSON序列化、单元测试(JUnit)、日志管理(Log4j)以及MVC框架(Struts2)等关键方面。对于理解和构建此类...

    allure_junit5_slf4j_log4j

    【标题】"allure_junit5_slf4j_log4j" 涉及的关键技术是集成测试框架Allure、Junit5、日志处理库SLF4J和Log4j2,它们在Java开发中扮演着至关重要的角色。本文将深入探讨这些组件及其相互作用。 **1. Allure ...

    log4j,dom4j,jstl.xpath等web开发所有jar包

    log4j允许开发者自定义日志级别(如DEBUG, INFO, WARN, ERROR, FATAL),并可以将日志信息输出到控制台、文件、电子邮件、数据库等不同目的地。通过配置文件(如log4j.properties或log4j.xml),开发者可以轻松地...

    struts+hibernate+spring+xdoclet+ant+log4j

    **Log4j** 是一个日志记录框架,它提供灵活的日志配置,可以根据不同的需求输出不同级别的日志信息,如调试、信息、警告和错误。Log4j的配置简单,且性能高效,是Java应用中广泛使用的日志解决方案。 当这些技术...

Global site tag (gtag.js) - Google Analytics