assertj / assertj/assertj-generator

Duplicated assertion method with target class implementing method from interface

Aperta
#278 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Lingua principale
Java
Stelle
72
Fork
47
Merge medio
1g 16h
PR unite (30g)
2

Descrizione

> 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 https://github.com/assertj/assertj-assertions-generator-maven-plugin/issues/93#issuecomment-3183154411_

Guida per i contributori

Apri la guida per i contributori

Direzione di ricerca

Non viene indicato alcun file sorgente né alcun test. Inizia individuando il percorso del generatore che trasforma i metodi dell’interfaccia e dell’implementazione in metodi di asserzione, quindi riproduci il caso con un’interfaccia id() e una classe che la implementa. Il lavoro è completato quando la generazione non produce più metodi hasId duplicati e il comportamento è coperto da un test di regressione.

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

Valutazione

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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.