2013-05-13 42 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