Junit4: Asserts fĂŒr CharSequence-Inhalte

Erstellt am 18. MĂ€rz 2017  Â·  13Kommentare  Â·  Quelle: junit-team/junit4

Viele APIs in Android beschÀftigen sich mit CharSequence . Und die Verwendung von assertEquals() mit CharSequence Argumenten ist umstÀndlich und instabil. Man muss genau den gleichen Typ reproduzieren, der sich spÀter Àndern kann.
Und manchmal funktioniert es einfach nicht (zB StringBuilder verwendet die Standardimplementierung von Object.equals() ).

Daher wĂŒrde ich vorschlagen, neue Methoden hinzuzufĂŒgen wie
assertContentEquals(CharSequence expected, CharSequence actual)
das wĂŒrde nur den Inhalt vergleichen, unabhĂ€ngig von der Art, in die er verpackt wurde.

(Pull Request #949 hat versucht, dies mit generischen assertEquals() zu tun, was in der Tat fragwĂŒrdig ist)

Ich kann eine Pull-Anfrage erstellen, wenn Sie diesen Vorschlag fĂŒr angemessen halten.

feature up-for-grabs

Hilfreichster Kommentar

@joseph-mccarthy GitHub lĂ€sst Sie anscheinend nur jemandem im Projektteam Probleme zuweisen. Aber wir vergeben sowieso fast nie Themen. FĂŒhlen Sie sich frei, einen Pull-Request zu senden, nachdem Sie https://github.com/junit-team/junit4/blob/master/CONTRIBUTING.md gelesen haben

Alle 13 Kommentare

Wichtiges Thema, aber ich wĂŒrde es vorziehen, es in assertEquals oder einer Überladung von assertEquals zu tun. Zu wissen, welche Assert-Nachricht fĂŒr welchen Anwendungsfall verwendet werden soll, ist fehleranfĂ€llig.

Sie sollten erwĂ€gen, Assertion-Frameworks mit einer flĂŒssigen API (wie Truth oder Fest) zu verwenden.

Das Problem bei assertEquals ist, dass Sie manchmal auch die Typen vergleichen mĂŒssen.
Also glaube ich, dass assertEquals("abc", new StringBuilder("abc")) fehlschlagen muss. Daher sind separate Methoden erforderlich, um nur den Inhalt zu vergleichen.
Dies ist IMO dem aktuellen assertArrayEquals Ansatz sehr Àhnlich.

Ich stimme zu, dass die Auswahl der richtigen Methode etwas schwieriger werden wĂŒrde. Aber es ist auf jeden Fall besser als der derzeitige Mangel an richtiger CharSequence UnterstĂŒtzung.

Könnten Sie auflisten, welche spezifischen Methoden Sie vorschlagen?

Bisher habe ich nur an diese beiden gedacht:
Assert.assertContentEquals(CharSequence expected, CharSequence actual)
Assert.assertContentEquals(String message, CharSequence expected, CharSequence actual)

Können Sie bessere Beispiele nennen? Ich wĂŒrde niemals assertEquals("abc", new StringBuilder("abc")) schreiben (ich wĂŒrde build() fĂŒr den Builder aufrufen)

Außerdem denke ich, dass DSL-basierte Frameworks oft besser passen. In Wahrheit wĂŒrde ich schreiben:

assertThat(myCharSequence).hasValue("hello");

Beachten Sie, dass hasValue() ein String also steht außer Frage, was es bedeutet, wenn zwei CharSequence Werte als gleich angesehen werden.

Hier ist ein Beispiel, wie es in einem Test aussehen könnte:
assertContentEquals("abc", bundle.getCharSequence(Notification.EXTRA_TEXT));

Es ist eine gute Idee, auch ein HasValue Matcher hinzuzufĂŒgen.

Danke. Da CharSequence keinen Vertrag fĂŒr equals() bereitstellt, wie schlagen Sie vor, dass wir zwei CharSequence Werte als gleich betrachten? Ist es einfach, dass sie dieselbe ReprĂ€sentation von toString() ? Wenn ja, warum machen Sie nicht den erwarteten Wert zu String ?

Guter Punkt. Obwohl ich zögere, weil erwartete und tatsÀchliche Werte mit demselben Typ sauberer aussehen.

Und ich wĂŒrde auch zuerst die LĂ€ngen vergleichen. Um zu vermeiden, dass toString() aufgerufen wird, es sei denn, es ist wirklich notwendig.

Ich möchte diese Funktionsanfrage bitte annehmen. Könnte es mir bitte zugeteilt werden. Danke schön.

@joseph-mccarthy GitHub lĂ€sst Sie anscheinend nur jemandem im Projektteam Probleme zuweisen. Aber wir vergeben sowieso fast nie Themen. FĂŒhlen Sie sich frei, einen Pull-Request zu senden, nachdem Sie https://github.com/junit-team/junit4/blob/master/CONTRIBUTING.md gelesen haben

@kcooney Ich habe eine Frage zu diesem Problem, ist es noch zu gewinnen?
Ich sehe, dass es in PR #1439 verlinkt ist, aber dass PR seit lĂ€ngerer Zeit eine Änderung beantragt. Kann ich das als Grundlage fĂŒr eine neue PR nehmen und die Rezensionskommentare durchgehen?

@joseph-mccarthy arbeitest du noch daran?

@kcooney Ich

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen