当前位置: 首页 > 面试题库 >

单元测试中是否有任何简单的slf4j使用模式?

高建本
2023-03-14
问题内容

我在项目中使用JUnit4和Hibernate3。Hibernate依赖于Slf4j,因此我的项目也包括此库。现在,我想在单元测试中使用Slf4j,以便记录补充测试信息。您能否提供一个简短的示例,说明我的单元测试仅记录一行文本的外观?最好在多个测试中
不重复代码


问题答案:

我还喜欢在我的DAO类的JUnit测试中使用slf4j。当您创建新测试或修改旧测试时,它确实有帮助。我通常将旧的日志记录输出保留在调试级别,而使新的日志记录记录处于信息级别,而我仍在积极地使用该方法编写代码。我的JUnit类之一如下所示:

package com.example.mydao;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// other imports not shown...

public class TestMyDAO extends TestCase {

    private static final Logger logger = 
        LoggerFactory.getLogger(TestMyDAO.class);


    public void testA() {
        logger.debug("Logging from testA() method");
    }

    public void testB() {
        logger.debug("Logging from testB() method");
    }

    public void testThatIAmWorkingOn() {
        logger.info("Logging from my new test method at INFO level");
    }

}

我使用log4j作为实际的日志记录提供程序,因此我的log4j.xml配置文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
    <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %-5p  [%c{1}] %m %n" />
        </layout>
    </appender>

    <logger name="com.example.mydao" additivity="false">
        <level value="INFO" />
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="org.hibernate" additivity="false">
        <level value="WARN" />
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="org.hibernate.connection.DriverManagerConnectionProvider" additivity="false">
        <level value="INFO" />
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="org.hibernate.connection.C3P0ConnectionProvider" additivity="false">
        <level value="INFO" />
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="com.mchange" additivity="false">
        <level value="WARN" />
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="com.mchange.v2.resourcepool.BasicResourcePool" additivity="false">
        <level value="INFO" />
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource" additivity="false">
        <level value="INFO" />
        <appender-ref ref="consoleAppender"/>
    </logger>

    <logger name="com.mchange.v2.c3p0.C3P0Registry" additivity="false">
        <level value="INFO" />
        <appender-ref ref="consoleAppender"/>
    </logger>

    <root>
        <priority value ="WARN" />
        <appender-ref ref="consoleAppender"/>
    </root>

</log4j:configuration>

这为我提供了JUnit类的信息级输出,以及Hibernate运行时和Hibernate使用的其他库中的一些有用信息。适应自己的口味。

最后,当我执行JUnit测试时,我需要确保以下所有库都在我的类路径中:

  • slf4j-api-1.6.0.jar
  • slf4j-log4j12-1.6.0.jar
  • log4j-1.2.16.jar
  • log4j.xml (我的配置文件,如上所示)
  • 某些版本的JUnit运行时JAR
  • 在生产环境中运行应用程序时,通常会显示所有JAR

这是我在使用log4j时所做的。如果使用其他日志记录实现,请进行相应调整。只要您使用的是不同版本的slf4j,都没关系,只要“
API”和实现JAR是相同的版本(我的都是1.6.0)即可。



 类似资料:
  • 我不熟悉匕首。我创建了一个非常简单的单元测试,试图理解我应该如何使用dagger。不幸的是,它失败了。我可能还不了解匕首的一些基本原理。 而我的测试课失败了 我认为dagger会将B注入A,因为A希望注入B,DaggerModule包含一个@Providers注释方法,该方法创建B。 更新: 我发现当我像这样编写模块类时 将B注入A作品中。然而,我不理解为什么当模块有一个构造a实例的带注释的方法时

  • 问题内容: 基本上,当测试中断或通过时,咆哮通知(或其他回调)。 像这样的东西存在吗? 如果没有,那应该很容易写..最简单的方法是.. 跑 检查要监视的文件是否已被修改(可能只是已保存)。 在这些文件中运行任何测试。 如果测试失败,但在上一次运行中通过,则生成咆哮警报。与失败然后通过的测试相同。 等待,然后重复步骤2-5。 我可以看到的问题是测试是否在其他文件中。一种简单的解决方案是在每次保存后运

  • 问题内容: 我知道关于模拟和测试有很多问题,但是我发现没有任何问题可以完美地帮助我,因此我仍然对理解以下内容有疑问: 如果我弄错了,请纠正我,但据我所知,单元测试用于隔离测试一个特定类的业务逻辑,并且如果有外部需要的任何对象,它们将被模拟。因此,例如,如果我有一个简单城市居民的管理系统,该系统将居民添加到列表中并按姓名返回居民(假设:居民仅包含一些基本个人信息),如下所示: 如果现在我要进行单元测

  • 为了获得可重用和可测试的rxjava代码,我使用ObservableTransformers分离了代码的各个部分。它在生产中工作得很好,但是测试它并不像预期的那么容易,因为我似乎无法模拟那些观察到的ransformers。 when(observableTransformer.apply(any())).thenreturn(observable.just(“mockedtext”)); 一旦调用

  • 本文向大家介绍PHP单元测试PHPUnit简单用法示例,包括了PHP单元测试PHPUnit简单用法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP单元测试PHPUnit简单用法。分享给大家供大家参考,具体如下: windows开发环境下,PHP使用单元测试可以使用PHPUnit。 安装 首先下载PHPUnit,官网:https://phpunit.de/  根据自己的PHP版本下