How to get an output from JUnit assertEquals() met

2019-03-06 15:40发布

问题:

I have a JUnit test case here to test a simple class. Basically the class contains just one method called 'sum' that returns the sum of two numbers. To test if this is right I use the following method: Assert.assertEquals(2, my_object.sum(1, 2)); The result displays in a tab on eclipse, in a section called "Failure Trace". The message says: junit.framework.AssertionFailedError: expected:<2> but was:<3>. Is it possible to get this message and put it into a String variable?

回答1:

From the Java doc assertEquals will

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.

You have to catch AssertionError when your condition fails.

Try this code:

 @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>

For more info about AssertionError visit java doc : AssertionError and Assert



回答2:

assertEquals is a void method. You cannot put the result to variable. But you can get the exception with try/catch block.

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