簡體   English   中英

無法在JUnit4的@Override中捕獲異常詳細信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM