ユニットテストで slf4j を使用する簡単なパターンはありますか? 質問する

ユニットテストで slf4j を使用する簡単なパターンはありますか? 質問する

私のプロジェクトでは、JUnit4 と Hibernate3 を使用しています。Hibernate は Slf4j に依存しているため、私のプロジェクトにはこのライブラリも含まれています。今、私は追加のテスト情報をログに記録するために、ユニットテストで Slf4j を使用したいと考えています。1 行のテキストをログに記録するために、ユニットテストがどのようになるかについて、簡単な例を教えていただけますか?コードの重複なし複数のテストで。

ベストアンサー1

私はまた、DAO クラスの JUnit テストで slf4j を使用するのが好きです。これは、新しいテストを作成したり、古いテストを変更したりするときに役立ちます。私は通常、古いログ出力をデバッグ レベルのままにしておき、そのメソッドのコードにまだ積極的に取り組んでいる間は、新しいログ ステートメントを情報レベルで作成します。私の JUnit クラスの 1 つは次のようになります。

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 を使用するときに私が行っていることです。別のログ実装を使用する場合は、それに応じて調整してください。「API」と実装 JAR が同じバージョンである限り、異なるバージョンの slf4j を使用していても問題ありません (私の場合は両方とも 1.6.0 です)。

おすすめ記事