Geltendmachung habe ich eine Arbeits hamcrest Behauptung:Eigenschaften auf Listenelemente mit assertJ
assertThat(mylist, contains(
containsString("15"),
containsString("217")));
Das gewünschte Verhalten ist:
mylist == asList("Abcd15", "217aB")
=> ErfolgmyList == asList("Abcd15", "218")
=> Ausfall
Wie kann ich diesen Ausdruck zu assertJ migrieren.
assertThat(mylist.get(0)).contains("15");
assertThat(mylist.get(1)).contains("217");
Aber das sind Behauptungen über die Listenelemente, nicht auf der Liste
: Natürlich gibt es naive Lösungen, wie, wie dies auf dem ersten und dem zweiten Wert zu behaupten. Das Versuchen von Behauptungen in der Liste beschränkt mich auf sehr generische Funktionen. Vielleicht könnte es nur mit einer benutzerdefinierten Behauptung gelöst werden, so etwas wie die folgenden wäre schön:assertThat(mylist).elements()
.next().contains("15")
.next().contains("217")
Aber bevor ich eine benutzerdefinierte Assertion schreiben, würde mich interessieren, wie andere würde dieses Problem lösen?
Edit: Eine zusätzliche nicht-funktionale Anforderung ist, dass der Test leicht durch zusätzliche Constraints erweiterbar sein sollte. In Hamcrest ist es ziemlich einfach, zusätzliche Beschränkungen auszudrücken, z.
assertThat(mylist, contains(
emptyString(), //additional element
allOf(containsString("08"), containsString("15")), //extended constraint
containsString("217"))); // unchanged
Tests abhängig von der Listenindex sein wird für dieses Beispiel werden neu nummeriert müssen, Tests einen benutzerdefinierten Zustand verwendet, wird die komplette Bedingung (beachten Sie, dass die Einschränkungen in allOf
sind nicht beschränkt auf Teilkette überprüft) neu schreiben müssen.
Ist das Ihr wirklicher Anwendungsfall, oder möchten Sie beispielsweise überprüfen, dass zum Beispiel eine Liste von Benutzern Benutzer mit den Namen "John" und "Jack" und mit dem Alter von 25 und 45 hat? –
Der wirkliche Anwendungsfall ist ein Quellcode-Generator. Jeder Eintrag der Liste ist ein generiertes Quellcode-Snippet. Der Quellcode wird nicht analysiert (nur auf die Festplatte geschrieben), aber es gibt Szenarien, in denen der Quellcode bestimmte Muster enthalten sollte oder nicht. Eine Lösung zum Zerlegen von Objekten würde das Problem nicht lösen. – CoronA