assertj / assertj/assertj-generator

Feature: Generate IterableAsserts for all generated Asserts

Offen
#219 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Java
Sterne
72
Forks
47
Ø Merge
1 T. 16 Std.
Gemergte PRs (30 T.)
2

Beschreibung

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.

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Beginne damit, den Assertion-Generator nachzuverfolgen, der FooAssert erstellt, und untersuche dann, wie ListAssert und die assertThat-Einstiegspunkte erzeugt werden. Vergleiche die angeforderte Form von FooIterableAssert mit der aktuell generierten Ausgabe und entscheide, wie generierte Iterable-Assertions bereitgestellt werden sollten. Erledigt bedeutet, dass generierte Assertions die angeforderte Verwendung von singleElement().hasName("Fool") ohne manuelle Wrapper-Klassen unterstützen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
java
Bereich
tooling
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.