Description
I'd like to propose a change that I think would make the assertEquals
methods easier to work with - apologies if I've missed something.
When a test fails in Eclipse with assertEquals()
and the parameters are not strings, an AssertionError
is thrown. This gives a backtrace, but to see what was not equal, I have to copy and paste out the error into another editor to read the top line. Here's a screen shot:
It would be great if could throw a ComparisonFailure
. I'd still see pretty much the same failure trace:
but I'd be about to double click it/click the "Compare with Expected Results" button and get this:
which would be a tremendous help to my work flow.
When looking into this I did think surely Eclipse could do something better, but I don't think it can. An AssertionError
doesn't have the expected and actual results. They are thrown away by the call to failNotEquals
which calls 'format' that then concatenates a single string to pass to AssertionError
So looking at assertEquals
for Object
's could we just do away with the instanceof
checks?
public static void assertEquals(String message, Object expected,
Object actual) {
if (equalsRegardingNull(expected, actual)) {
return;
}
if (expected instanceof String && actual instanceof String) {
String cleanMessage = message == null ? "" : message;
throw new ComparisonFailure(cleanMessage, (String) expected,
(String) actual);
} else {
failNotEquals(message, expected, actual);
}
}