assertj / assertj/assertj-generator
Feature: Generate IterableAsserts for all generated Asserts
- Lingua principale
- Java
- Stelle
- 72
- Fork
- 47
- Merge medio
- 1g 16h
- PR unite (30g)
- 2
Descrizione
We would like to write something like this:
```java
List result;
assertThat(result).singleElement().hasName("Fool")
```
Now, we can generate `FooAssert` with the generator, but the `ListAssert` we get out of `assertThat` in this case does, of course, not known about the generated assertion; we get a regular `ObjectAssert`.
We can work around this by creating something like this here:
```java
public class FooIterableAssert
extends AbstractIterableAssert, Foo, FooIterableAssert> {
protected FooIterableAssert(Iterable foos, Class selfType) {
super(foos, selfType);
}
@Override
protected FooAssert toAssert(Foo value, String description) {
return new FooAssert(value);
}
@Override
protected FooIterableAssert newAbstractIterableAssert(Iterable iterable) {
return new FooIterableAssert(iterable, FooIterableAssert.class);
}
public static FooIterableAssert assertThat(List foos) {
return new FooIterableAssert(foos, FooIterableAssert.class);
}
}
```
This has the feel of "should be a template" and "surely not only we want this", so I'm raising this issue. :)
I'm also not sure whether one would have/want to fiddle with the entrypoint methods in support of this.
PS: I was considering to use Lombok's `@ExtensionMethod` on `ListAssert` to add something like `FooAssert singleFoo()` to it. Unfortunately, it does not seem possible to get the actual _value_ back from an Assert, so I was stuck there.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia tracciando il generatore di assertion che crea FooAssert, quindi esamina come vengono prodotti ListAssert e i punti di ingresso assertThat. Confronta la forma richiesta di FooIterableAssert con l’output generato attualmente e decidi come dovrebbero essere esposte le assertion iterable generate. Il lavoro è completato quando le assertion generate supportano l’uso richiesto di singleElement().hasName("Fool") senza classi wrapper manuali.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- java
- Ambito
- tooling
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100