[英]Cannot capture exception details in @Override in JUnit4
@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]"));
我的問題是如何將錯誤消息“缺少第一張圖片”傳遞給@Override
,以使其打印出該消息。
關於您的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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.