Skip to content

Throw ComparisonFailure rather than AssertionError for all equals methods #1416

Closed as not planned
@liamsharp

Description

@liamsharp

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:

screen shot 2017-02-03 at 18 49 26

It would be great if could throw a ComparisonFailure. I'd still see pretty much the same failure trace:

screen shot 2017-02-03 at 18 52 05

but I'd be about to double click it/click the "Compare with Expected Results" button and get this:

screen shot 2017-02-03 at 18 52 20

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);
        }
    }

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions