概要:
外部と通信するコードの動作のテストシステムでは、生成されたメッセージの内容と形式を検証することがよくあります。 Java では、このようなメッセージを記録する一般的な方法はロギングです。この記事では、JUnit フレームワークを使用してログ エントリの単体テストを実行する方法について説明します。
ログ メッセージの JUnit アサーション:
質問で提供されているコード スニペットは、アサートすることを目的としています。特定のレベル (例: INFO) とメッセージ (「x が発生しました」) を持つ特定のログ エントリがテスト対象のコードによって生成されたこと。これを実現するには、ログ イベントをインターセプトして保存するカスタム ロガーまたはハンドラーを採用できます。
カスタム ロガー/ハンドラーのアプローチ:
このアプローチでは、特殊なロガーを作成する必要があります。またはロギング イベントをキャプチャするハンドラー。テスト対象のコード内のログ ステートメントはこのカスタム ロガーに送信され、ログに記録されたメッセージの取得と検査が可能になります。ただし、このアプローチは実装が複雑になる可能性があり、テスト対象のコードを変更する必要があります。
ログ コレクター パターン:
より便利な解決策は、カスタム アペンダーを使用することです。ログ イベントをコレクションまたはリストに記録します。これを実現する方法は次のとおりです:
サンプル実装:
次のサンプル コードは、ログ コレクター パターンを示しています。
<code class="java">import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.is; public class LogCollectorTest { @Test public void testLogMessage() { // Create a custom appender to collect logging events. final TestAppender appender = new TestAppender(); // Add the appender to the logger we wish to test. final Logger logger = Logger.getLogger(LogCollectorTest.class); logger.addAppender(appender); // Execute code under test. logger.info("Test"); // Retrieve the list of logged events. final List<LoggingEvent> logs = appender.getLog(); // Perform assertions on the first log entry. assertThat(logs.get(0).getLevel(), is(Level.INFO)); assertThat(logs.get(0).getMessage(), is("Test")); } private static 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 テストのログ メッセージ。ログに記録されたイベントをデータ構造にキャプチャすると、その内容と形式を簡単に検証でき、コードとログ システムのやり取りの正確性を確保できます。
以上がJUnit でログ メッセージをアサートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。