2016-04-26 144 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'。 –

相关问题