7

私は TestNG テストを実行しており、ログ出力は に設定されてDEBUGいるため、失敗した場合に何が問題なのかを正確に調べることができます。

問題は、出力が非常に冗長であり、実行時に全員を悩ませていることです。すべての Log4J ロギング イベントをキャプチャしたいと思います (これは簡単です)。テストが失敗した場合にのみ出力します。また、メソッドを考慮に入れ@Before/@After、それらの出力も出力する必要があります。

Log4J の List を既に持っていると仮定すると、 / /メソッドが失敗しLoggingEventた場合にのみそれらを出力するにはどうすればよいですか?TestAfterBefore

4

4 に答える 4

4

Reporter.log(str) を使用して、レポートにメッセージを記録します。

@AfterMethod
public void printLOGonFailure(ITestResult result) {
    if (result.getStatus() == ITestResult.FAILURE) {
        String  str = getLog();
        Reporter.log(str);
    }
}
于 2016-02-12T22:03:44.830 に答える
2

こちらのサイトに作り方の説明があります。. リンクが切れた場合に備えて、ここにコード部分をコピーしました。

Logger.getLogger(this.getClass())
log4j.rootLogger=ERROR,TESTAPPENDER
log4j.appender.TESTAPPENDER=com.my.fantastic.MockedAppender
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;

public class FooTest {
    private Appender appenderMock;
    @Before
    public void setupAppender() {
        appenderMock = mock(Appender.class);
        Logger.getRootLogger().addAppender(appenderMock);
    }
    @After
    public void removeAppender() {
        Logger.getRootLogger().removeAppender(appenderMock);
    }
    @Test
    public void testMethod()  {
        doStuffThatCausesLogging();
        verify(appenderMock).doAppend((LoggingEvent) anyObject());
    }
}

ArgumentCaptor arguments = ArgumentCaptor.forClass(LoggingEvent.class);
verify(appenderMock).doAppend(arguments.capture());

assertThat(arguments.getValue().getLevel(), is(Level.WARN));

于 2010-07-16T09:55:49.067 に答える
1

org.testng.ITestListenerを実装して登録し、コールバックメソッドに反応します。

于 2010-07-15T09:09:04.453 に答える
0

JMockit を依存関係に入れます。これにより、ログのテストが非常に簡単になります。

テストクラスに入れます:

     @Cascading
final static Logger logging = Logger.getLogger(<some your>.class);

テストに入れる:

    testedFunction(a, b, c);
    new Verifications() {{
        logging.error("The message that should be output");
        logging.info("Another message");
    }};
于 2016-08-03T16:21:49.883 に答える