无法在JUnit4中捕获@Override中的异常详细信息

时间:2011-04-06 19:12:08

标签: java junit

@Rule
public MethodRule watchman = new TestWatchman() {
    @Override
    public void failed(Throwable e, FrameworkMethod method) {
        try {
            System.out.println("Exception =" + e.getClass().getSimpleName());
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        assertTrue(false);
    }
};

导致失败的代码是:

assertTrue("Missing first picture",selenium.isElementPresent("//div/a/img[2]"));   

我的问题是如何将错误消息“Missing first picture”传递给@Override,以便打印出该消息。

1 个答案:

答案 0 :(得分:0)

我对你的MethodRule.failed方法包含语句assertTrue(false)的原因感到有些困惑。为了便于讨论,我将假设你添加了该语句进行测试,然后没有为此帖删除它。

Assert.assertTrue方法失败时会导致抛出java.lang.AssertionError,并将其消息值设置为您作为assertTrue方法的第一个参数提供的文本。要检索该值,您只需调用以下内容:e.getMessage()

以下是一个Method规则的示例,该规则将监视的测试的成功和失败结果打印到System.err(仅作为示例使用):

@Rule
public MethodRule watchman = new TestWatchman() {
    @Override
    public void failed(Throwable e, FrameworkMethod method) {
        System.err.println(method.getName() + "() failed with error: " + e.getMessage());
    }

    @Override
    public void succeeded(FrameworkMethod method) {
        System.err.println(method.getName() + "() succeeded");
    }
};

如果您将此示例用于以下测试:

@Test
public void test1() {
    assertTrue("will not happen", true);
}

@Test
public void test2() {
    assertTrue("My error message", false);
}

您将看到以下内容:

test1() succeeded
test2() failed with error: My error message