@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
,以便打印出该消息。
答案 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