ホームページ > Java > &#&チュートリアル > カスタム アペンダーを使用して JUnit テストでログ メッセージをアサートするにはどうすればよいですか?

カスタム アペンダーを使用して JUnit テストでログ メッセージをアサートするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-10-30 10:58:02
オリジナル
481 人が閲覧しました

How to Assert Log Messages in JUnit Tests using a Custom Appender?

JUnit テストでログ メッセージをアサートする方法

Java ロガーを利用するコードをテストする場合、予期したログ エントリが生成されていることを確認することが不可欠になります。一般的なアプローチの 1 つは、ログ イベントをキャプチャするためのカスタム ロガーまたはハンドラーを作成することです。ただし、既存のログ コンポーネントを利用する、より便利なソリューションがあります。

カスタム アペンダの使用

JUnit テストでログ メッセージをアサートするには、ログをインターセプトして保存するカスタム Log4j アペンダを作成できます。イベント。以下にサンプル実装を示します。

<code class="java">import org.apache.log4j.AppenderSkeleton;
import org.apache.log4j.Level;
import org.apache.log4j.spi.LoggingEvent;
import java.util.ArrayList;
import java.util.List;

public class TestAppender extends AppenderSkeleton {
    private final List<LoggingEvent> log = new ArrayList<>();

    @Override
    public boolean requiresLayout() { return false; }

    @Override
    protected void append(LoggingEvent loggingEvent) { log.add(loggingEvent); }

    @Override
    public void close() {}

    public List<LoggingEvent> getLog() { return new ArrayList<>(log); }
}</code>
ログイン後にコピー

アペンダーの統合

JUnit テストでカスタム アペンダーを使用するには、次の手順に従います。

  1. アペンダーを次の場所に追加します。監視するロガー。
  2. テスト対象のコードを実行して、ロギング操作をトリガーします。
  3. アペンダーからキャプチャされたログ イベントを取得します。
  4. 必要なログ メッセージをアサートします。

例を示します:

<code class="java">@Test
public void test() {
    TestAppender appender = new TestAppender();
    Logger logger = Logger.getRootLogger();
    logger.addAppender(appender);
    try {
        // Execute code that calls the logger.
        Logger.getLogger(MyTest.class).info("Test");
    } finally {
        logger.removeAppender(appender);
    }

    List<LoggingEvent> log = appender.getLog();
    LoggingEvent firstLogEntry = log.get(0);
    assertThat(firstLogEntry.getLevel(), is(Level.INFO));
    assertThat((String) firstLogEntry.getMessage(), is("Test"));
    assertThat(firstLogEntry.getLoggerName(), is("MyTest"));
}</code>
ログイン後にコピー

考慮事項

  • クリーンアップ: 忘れずに削除してください。テスト完了後にカスタム アペンダを使用してメモリ リークを防ぎます。
  • スケーラビリティ: 大量のログ記録シナリオの場合は、過剰なメモリ消費を避けるためにアペンダにフィルタを追加することを検討してください。
  • 粒度: 複数のカスタム アペンダを使用して特定のロガーや個々のクラスを監視することができ、ログ検証をきめ細かく制御できます。

以上がカスタム アペンダーを使用して JUnit テストでログ メッセージをアサートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート