2013-05-13 67 views
6

我使用斷言等於比較兩個數字使用JUnit assertEquals的自定義異常消息?

Assert.assertEquals("My error message", First , Second); 

然後,當我生成測試報告,我得到

「預期(一)我的錯誤信息(二)「

如何自定義我用斜體表示的部分?數字的格式?

+0

我假設你正在使用Java。如果是Scala,請相應地調整標籤。 – 2013-05-13 14:53:46

回答

5

該消息在Assert類中進行了硬編碼。您必須編寫自己的代碼來生成自定義消息:

if (!first.equals(second)) { 
    throw new AssertionFailedError(
     String.format("bespoke message here", first, second)); 
} 

(注:上面是一個粗略的例子 - 你要檢查空值等見Assert.java代碼,看看它是如何的完成)。

7

您可以使用這樣的事情:

int a=1, b=2; 
String str = "Failure: I was expecting %d to be equal to %d"; 
assertTrue(String.format(str, a, b), a == b); 
+1

這不會改善這種情況。 OP已經知道如何添加錯誤信息,但是目標是以斜體字改變部分的措辭。你的解決方案仍然會有措辭。 – 2013-05-13 14:59:00

+0

你確定嗎?在Eclipse上運行(2,1)我只得到「失敗:我期待2等於1」而不是「期望...是」部分... – Salem 2013-05-13 15:10:21

+1

@Salem,這是因爲你使用assertTrue,不是assertEquals – kryger 2013-05-13 15:18:44

0

感謝您的回答,我的斷言類此

 static String format(String message, Object expected, Object actual) { 
    String formatted= ""; 
    if (message != null && !message.equals("")) 
     formatted= message + " "; 
    String expectedString= String.valueOf(expected); 
    String actualString= String.valueOf(actual); 
    if (expectedString.equals(actualString)) 
     return formatted + "expected: " 
       + formatClassAndValue(expected, expectedString) 
       + " but was: " + formatClassAndValue(actual, actualString); 
    else 
     return formatted + "expected:<" + expectedString + "> but was:<" 
       + actualString + ">"; 
} 

我想我不能修改的Junit斷言類中找到,但我可以在我的項目中創建一個具有相同名稱的新類,只是更改格式,對嗎?或者我可以改變我的課程的格式,它會影響拋出的異常?

+2

是的,你可以採取這種方法。這實際上就是我在回答中提出的建議 - 如果需要更改消息,則必須編寫自己的代碼來執行測試。 – 2013-05-13 19:16:16