java - 测试失败时如何使用 Log4j 写入日志文件

标签 java testing exception log4j

我想用 Log4j 实现写入log 文件。

我找到了一个简单的解决方案 - 用 try - catch 包围测试体:

@Test(groups = "GMAIL_PAGE")
public void testAllMailLink() {
    try {
        List<WebElement> allMessages = page.takeAllMessage();
        page.clickInboxLink();
        List<WebElement> inboxMessages = page.takeInboxMessage();
        page.clickDraftLink();
        List<WebElement> draftMessages = page.takeDraftMessage();

        Assert.assertTrue(allMessages.containsAll(inboxMessages),
                "All messages doesn't contains all inbox messages");
        Assert.assertTrue(allMessages.containsAll(draftMessages),
                "All messages doesn't contains all draft messages");
        log.info("test is passed");
    } catch (Exception e) {
        log.error(e);
    }
}

但它有一些缺点 - 这个测试总是通过,即使它失败了。

如果我在我的机器上工作并且能够看到控制台就没问题。但是这个测试推送到持续集成服务器上怎么办呢?

当测试失败时,是否存在任何其他方式将信息写入日志文件?

最佳答案

log.error(e) 下方添加 Assert.fail():

catch (Exception e) {
    log.error(e);
    Assert.fail();
}

顺便说一下,您正在调用 Logger#error(Object) ,它使用 e.toString()。在这种情况下,最好使用描述性消息,然后传递异常以获取相应的堆栈跟踪:

catch (Exception e) {
    log.error("Some descriptive message should go here.", e);
    Assert.fail("Some descriptive message should go here as well.");
}

关于java - 测试失败时如何使用 Log4j 写入日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23792336/

相关文章:

python - "TypeError: bad argument type for built-in operation"

JavaFX : Redirect Input/Output/Error From ProcessBuilder to TextArea?

java - span html 标签的模式编译器

java - Android字符串提取

javascript - 带 d3 图表的 enzyme 测试支架

python - 将两个 Python try/except block 压缩为一个而不改变行为

java - 解决 IllegalAccessError

java - 每个添加的 DAO 接口(interface)都以指数方式增加启动时间(Spring 初始化)

javascript - 如何使用 sinon.js 监视预定义对象

python: 如何使用 TO、CC 和 BCC 发送邮件?