assertj / assertj/assertj-generator
Duplicated assertion method with target class implementing method from interface
- 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