All Downloads are FREE. Search and download functionalities are using the official Maven repository.

nablarch.test.core.log.ExpectedLogMessage Maven / Gradle / Ivy

There is a newer version: 2.2.0
Show newest version
package nablarch.test.core.log;

import nablarch.core.log.basic.LogContext;
import nablarch.core.log.basic.LogLevel;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static nablarch.core.util.Builder.concat;

/**
 * 期待するログメッセージを表すクラス。
* ログが想定通り出力されることを確認する為に使用する。 * * @author T.Kawasaki * @see LogVerifier */ public class ExpectedLogMessage { /** 期待するメッセージ */ private final List expectedMessages; /** 期待するログレベル */ private final LogLevel expectedLogLevel; /** * コンストラクタ。
* * @param logLevel 期待するログレベル * @param messages 期待するメッセージ */ public ExpectedLogMessage(LogLevel logLevel, List messages) { expectedLogLevel = logLevel; expectedMessages = messages; } /** * コンストラクタ。
* * @param logLevel 期待するログレベル * @param messages 期待するメッセージ */ ExpectedLogMessage(LogLevel logLevel, String... messages) { this(logLevel, Arrays.asList(messages)); } /** * 実際のログとマッチするか判定する。
* 以下の条件全てを満たす場合に真と判定する。 *
    *
  • ログレベルが等しい。
  • *
  • 実際のメッセージに、期待するメッセージが含まれている。
  • *
* * @param actual 実際のログ * @return 判定結果 */ public boolean matches(LogContext actual) { // ログレベルが等しいか LogLevel actualLogLevel = actual.getLevel(); if (!expectedLogLevel.equals(actualLogLevel)) { return false; } // ログの文言 List actualMessages = new ArrayList(); actualMessages.add(actual.getMessage()); // 例外のエラーメッセージ extractMessages(actual.getError(), actualMessages); String allActualMessage = actualMessages.toString(); return contains(allActualMessage); } /** * 例外またはエラーから、メッセージを抽出する。 * * @param t 例外またはエラー * @param accumulator 結果を収集するリスト */ private void extractMessages(Throwable t, List accumulator) { if (t == null) { return; } accumulator.add(t.getMessage()); Throwable next = t.getCause(); if (next == null || next == t) { return; } extractMessages(next, accumulator); // tail recursion } /** * 期待するメッセージ全てが、実際のメッセージに含まれているか判定する。 * * @param actual 実際のメッセージ * @return 期待するメッセージ全てが含まれていた場合に真 */ private boolean contains(String actual) { for (String e : expectedMessages) { if (!actual.contains(e)) { return false; } } return true; } /** {@inheritDoc} */ @Override public String toString() { return concat("Log level=[", expectedLogLevel, "] messages=", expectedMessages); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy