assertj / assertj/assertj-generator

Assertion compilation fails when class has a template field

Ouverte
#182 0 commentaires 1 réaction 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
Java
Étoiles
72
Forks
47
Merge moyen
1 j 16 h
PR mergées (30 j)
2

Description

Generations plugin versions in maven:

            <plugin>
                <groupId>org.assertj</groupId>
                <artifactId>assertj-assertions-generator-maven-plugin</artifactId>
                <version>2.2.0</version>

Test class

package testassertj;

import lombok.Data;

@Data
public class TemplateClassField<T> {

    protected T model;
}

Generated assertion class:

package testassertj;

import org.assertj.core.api.AbstractObjectAssert;
import org.assertj.core.util.Objects;

/**
 * {@link TemplateClassField} specific assertions - Generated by CustomAssertionGenerator.
 */
@javax.annotation.Generated(value="assertj-assertions-generator")
public class TemplateClassFieldAssert extends AbstractObjectAssert<TemplateClassFieldAssert, TemplateClassField> {

  /**
   * Creates a new <code>{@link TemplateClassFieldAssert}</code> to make assertions on actual TemplateClassField.
   * @param actual the TemplateClassField we want to make assertions on.
   */
  public TemplateClassFieldAssert(TemplateClassField actual) {
    super(actual, TemplateClassFieldAssert.class);
  }

  /**
   * An entry point for TemplateClassFieldAssert to follow AssertJ standard <code>assertThat()</code> statements.<br>
   * With a static import, one can write directly: <code>assertThat(myTemplateClassField)</code> and get specific assertion with code completion.
   * @param actual the TemplateClassField we want to make assertions on.
   * @return a new <code>{@link TemplateClassFieldAssert}</code>
   */
  @org.assertj.core.util.CheckReturnValue
  public static TemplateClassFieldAssert assertThat(TemplateClassField actual) {
    return new TemplateClassFieldAssert(actual);
  }

  /**
   * Verifies that the actual TemplateClassField's model is equal to the given one.
   * @param model the given model to compare the actual TemplateClassField's model to.
   * @return this assertion object.
   * @throws AssertionError - if the actual TemplateClassField's model is not equal to the given one.
   */
  public TemplateClassFieldAssert hasModel(T model) {
    // check that actual TemplateClassField we want to make assertions on is not null.
    isNotNull();

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

    // null safe check
    T actualModel = actual.getModel();
    if (!Objects.areEqual(actualModel, model)) {
      failWithMessage(assertjErrorMessage, actual, model, actualModel);
    }

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

}

Compilation fails on public TemplateClassFieldAssert hasModel(T model) { method:

[ERROR] /C:/java/myproject/target/generated-test-sources/assertj-assertions/testassertj/TemplateClassFieldAssert.java:[37,44] cannot find symbol
[ERROR]   symbol:   class T
[ERROR]   location: class testassertj.TemplateClassFieldAssert

Expected behaviour:
Generated assert class is also <T> templated, so that hasModel(T model) compiles successfully.

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez l’échec avec la configuration Maven du plugin montrée et l’exemple de TemplateClassField, puis examinez le chemin du générateur qui crée la classe d’assertion et ses signatures de méthode. C’est terminé lorsque l’assertion générée conserve le paramètre de type, que la méthode hasModel(T model) compile et qu’un test de régression couvre le cas du champ de template.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
java
Domaine
build-system, testing
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
50/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.