Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Assertion compilation fails when class has a template field

Aperta
#182 0 commenti 1 reazione 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
50/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
java

Direzione di ricerca

Riproduci il malfunzionamento con la configurazione del plugin Maven mostrata e l’esempio di TemplateClassField, quindi esamina il percorso del generatore che crea la classe di asserzione e le relative firme dei metodi. Il lavoro è completato quando l’asserzione generata conserva il parametro di tipo, il metodo hasModel(T model) compila e un test di regressione copre il caso del campo template.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Java
Stelle
72
Fork
47
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di assertj/assertj-generator

Tutte le issue di assertj/assertj-generator

Issue simili

Altre issue su Java

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.