2013-04-11 22 views
0

有沒有辦法給JUnit輸出添加消息?剛纔我可以給ErrorCollector添加一個帶有這個消息的異常,但是我將會得到和堆棧,我不需要最後一個。我想在錯誤之前添加消息如何將簡單消息插入到JUnit輸出中?

這個想法是:在檢查XML時,收集所有的差異,並在最後如果出現錯誤,輸出XML本身以及錯誤之後的錯誤。

編輯: 請注意,我想添加到現有的輸出,而不是隻輸出我的消息。

+1

正常情況下,我只是使用我選擇的日誌框架添加日誌語句。這對你來說足夠嗎? – 2013-04-11 09:59:51

+0

@DuncanJones如果您有一個項目,它可以正常工作。但是,如果您使用數十個和數百個項目,並且所有這些項目都可以向JUnit寫入某些內容,但結果卻不可讀。所以解決方案很糟糕,因爲它不是**可擴展**。 (我之前使用過,而且非常不方便) – Gangnus 2013-04-11 10:54:52

回答

1

編寫您自己的錯誤收集器。應該很容易包裝現有的斷言方法,捕捉異常並跟蹤如果你有任何失敗。如果您將此作爲規則編寫,則可以在每次測試後對其進行評估,而您必須手動進行評估。

+0

我已經使用我自己的VariantErrorCollector。但是我沒有在ErrorCollector的源代碼中找到任何將字符串寫入JUnit輸出的地方。 – Gangnus 2013-04-11 10:56:39

+0

@Gangnus「*我已經使用我自己的VariantErrorCollector。*」>這類信息在您的問題中非常有用! – 2013-04-11 11:29:36

+0

不,因爲派生自ErrorCollector的類將不允許檢查錯誤數量並添加字符串而不是消息。 – Gangnus 2013-04-11 11:52:32

1

聽起來好像你正在尋找ErrorCollector有一些不同的行爲。最好的解決方案就是推出自己的版本。

這裏是ErrorCollector來源:https://github.com/junit-team/junit/blob/master/src/main/java/org/junit/rules/ErrorCollector.java

下面是一個簡單的版本,如果你只關心字符串和不需要的堆棧跟蹤。如果您也想收集堆棧跟蹤,但只是首先顯示所有字符串,我會將該代碼留給您。

public class ErrorMessageCollector extends Verifier { 
    private List<String> errors = new ArrayList<>(); 

    @Override 
    protected void verify() throws Throwable { 
     StringBuilder sb = new StringBuilder(); 
     for (String e : errors) { 
      sb.append(e).append('\n'); 
     } 
     assertTrue(sb.toString(), errors.isEmpty()); 
    } 

    /** 
    * Adds an error message to the table. Execution continues, but the test 
    * will fail at the end. 
    */ 
    public void addErrorMessage(String error) { 
     errors.add(error); 
    } 
} 
+0

所以,你打算打破現有的錯誤信息收集機制,並用String收集取代它。不用了,謝謝。我想收集字符串和異常消息。你「離我而去」只是我的問題。感謝您的參考......但是我已經從早上大約5次重讀了這個頁面。答案不在那裏。 – Gangnus 2013-04-11 11:08:23

+0

上述聽起來完全像你的問題的答案。似乎你需要澄清你的問題,因爲我們都認爲這會解決你所要求的。 – 2013-04-11 12:58:53

+0

問題聽起來如何:如何在輸出中插入消息,而不是如何僅輸出消息而不是通常的內容。您建議我一個好主意,我自己擴展了驗證器 - 用於檢查收集器中是否有錯誤。但問題仍然沒有得到解答,對不起。 – Gangnus 2013-04-12 08:13:29

相關問題