Skip to content

Duplicated assertion method with target class implementing method from interface #278

Description

@scordio

Hi @scordio ,

let me thank you first for your work. Because I was looking a long time that we can use records with AssertJ and can remove the templates.

The new version works perfectly in our project. Unfortunately, I found a bug with M4/M5. But maybe isn't bug, because our clever programming isn't that clever ;). Should I open an issue for that?

Short summary of the bug

  • We have an Interface X which has method called id()
  • We implement this Interface X in several classes. The typical implementation is
  • String id = "someId"; public String id() { return id; }
  • When AssertJ creates the *Assert classes it creates the method hasId twice, e.g.
 /**
   * Verifies that the actual Data's id is equal to the given one.
   * @param id the given id to compare the actual Data's id to.
   * @return this assertion object.
   * @throws AssertionError - if the actual Data's id is not equal to the given one.
   */
  public S hasId(String id) {
    // check that actual Data we want to make assertions on is not null.
    isNotNull();

    // overrides the default error message with a more explicit one
    String assertjErrorMessage = "\nExpecting id of:\n  <%s>\nto be:\n  <%s>\nbut was:\n  <%s>";

    // null safe check
    String actualId = actual.getId();
    if (!Objects.deepEquals(actualId, id)) {
      failWithMessage(assertjErrorMessage, actual, id, actualId);
    }

    // return the current assertion for method chaining
    return myself;
  }

  /**
   * Verifies that the actual Data's id is equal to the given one.
   * @param id the given id to compare the actual Data's id to.
   * @return this assertion object.
   * @throws AssertionError - if the actual Data's id is not equal to the given one.
   */
  public S hasId(String id) {
    // check that actual Data we want to make assertions on is not null.
    isNotNull();

    // overrides the default error message with a more explicit one
    String assertjErrorMessage = "\nExpecting id of:\n  <%s>\nto be:\n  <%s>\nbut was:\n  <%s>";

    // null safe check
    String actualId = actual.id();
    if (!Objects.deepEquals(actualId, id)) {
      failWithMessage(assertjErrorMessage, actual, id, actualId);
    }

    // return the current assertion for method chaining
    return myself;
  }

Simple workaround
Renaming the method id() to getId() solved the problem and all Assertions classes are created correctly.

Originally posted by @schmuka0501 in assertj/assertj-assertions-generator-maven-plugin#93 (comment)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions