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 テストでカスタム アペンダーを使用するには、次の手順に従います。
例を示します:
<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 サイトの他の関連記事を参照してください。