2016-04-26 38 views
0

我有一個JUnit測試用例來測試一個簡單的類。基本上這個類只包含一個叫'sum'的方法,它返回兩個數字的總和。要測試這是否正確,我使用以下方法:Assert.assertEquals(2, my_object.sum(1, 2));結果顯示在eclipse上的標籤中,名爲「Failure Trace」。該消息說:junit.framework.AssertionFailedError: expected:<2> but was:<3>。是否有可能得到這個消息並把它放到一個String變量中?如何從JUnit assertEquals()方法獲取輸出並將其放入變量?

+2

你到底想幹什麼? – sisyphus

+1

你爲什麼想這樣做? –

+0

因爲我需要構建一個Web系統來評估使用JUnit測試用例作爲作業的類,並且我需要將此消息顯示給最終用戶。 –

回答

1

從Java文檔的assertEquals將

Asserts that two objects are equal. If they are not, an AssertionError without a message is thrown. If expected and actual are null, they are considered equal.

你必須趕上AssertionError當你的條件失敗。

試試這個代碼:

@Test 
    public void myTest() throws Exception{ 
     String assertionError = null; 
     try { 
      Assert.assertEquals(2,3); 
     } 
     catch (AssertionError ae) { 
      assertionError = ae.toString(); 
     } 
     System.out.println(assertionError); 

    } 

OUTPUT:

java.lang.AssertionError: expected:<2> but was:<3>

有關Asse田訪問Java文檔的詳細信息:AssertionErrorAssert

+0

對不起,這是什麼意思? JUnit測試的想法是允許**自動**執行。整個框架的基礎是失敗的測試用例拋出AssertionErrors;並且運行所有測試的框架捕獲它們。當然,你可以自己去捕捉它們,但是如果你這樣做......你可以走完全九碼,並徹底拋棄所有的Junit測試。因爲你只是渲染**毫無價值**。 – GhostCat

+0

@Jägermeister你是完全正確的。捕獲AssertionError沒有意義。由於OP已經提出了這個具體問題(他的作業),我已經回答了。 – Unknown

+0

我得到了那部分;我只是想知道是否有更深層的意義,我錯過了。就像在家裏工作一樣;你會期望教師應該要求「合理」的事情要做;而不是要求學生以完全「破碎」的方式使用框架。 – GhostCat

4

assertEqualsvoid方法。你不能把結果放到變量中。但您可以通過try/catch區塊獲得例外。

try{ 
    assertEquals("foo", "foo1"); //will fail 
} catch(AssertionError e){ 
    String message = e.getMessage(); 
    //do whatever you want with e 
} 
+0

我試過了,但不起作用。事實上,當assertEquals失敗時,這並不會成功。下一行在失敗時不執行。 –

+1

我的不好,修好了!問題是'AssertionError'沒有擴展'Exception' bu''錯誤'。所以最好趕上@Unknown建議的'AssertionError'。 –

相關問題