Sortierung in collections testen

uppss

Aktives Mitglied
Hallo Jungs und vielen Dank im Voraus!

Wie kann ich mit junit5 die Sortierung in einer Collection testen?

Java:
public void sorted() {
        List<Person> list = createList();

        List<Person> sortedList = list.stream()
                .sorted(Comparator.comparingInt(Person::getA))
                .collect(Collectors.toList());
        sortedList.forEach(System.out::println);
    }
 
Du könntest entweder eine sortierte Liste selbst zusammen bauen, sprich so wie sie nach der Sortierung aussehen soll oder du verwendest eine andere Collection, sortierst die Liste. Um zu testen ob die Liste korrekt sortiert wurde assertest du die sortierte Liste mit der entweder selbst gebauten Liste oder anders sortierten Liste 🙂
 
Vielen Dank. Ich habe leider nicht zu 100% verstanden

Java:
@Test
public void test(){
    List<Person> list1 = new ArrayList<>();
    Person p1 = new Person("p1", 1);
    Person p2 = new Person("p2", 3);
    Person p3 = new Person("p3", 2);

    List<Person> sollList = new ArrayList<>();
    Person p1 = new Person("p1", 1);
    Person p2 = new Person("p2", 2);
    Person p3 = new Person("p3", 3);

    Test test = new Test();
    test.sorted(list1);
    
    wie kann ich jetzt testen? vielen Dank!
}
 
Hab schon ewig kein JUnit mehr genutzt aber ich glaube es ging so:
Java:
Assert.assertEquals(list1, list2);
 
Du willst eine Liste haben zum Sortieren. Erstellen tust du eine zb „Lisst1“ aber füllen tust du sie nicht.

Du brauchst eine vergleichst Liste die die gleichen Elemente der zu sortierenden Liste in der richtigen Reihenfolge hat. Hast du auch nicht.



Du erstellt neue Elemente von Person aber der Liste gibst du sie nicht .

Und in der Vergleichs Liste hast du wieder neue Objekt . Da willst du ja die gleichen Objekte in der richtigen Reihenfolge haben zum vergleich.

Selbst wenn die Methode richtig sortiert wird der Test nicht True liefern.
 
Java:
 @Test
    public void test() {
        List<Person> list1 = new ArrayList<>();
        Person p1 = new Person("p1", 1);
        Person p2 = new Person("p2", 3);
        Person p3 = new Person("p3", 2);
        list1.add(p3);
        list1.add(p1);
        list1.add(p2);
        
        List<Person> sollList = new ArrayList<>();
        sollList.add(p1);
        sollList.add(p2);
        sollList.add(p3);
...
 
Du willst eine Liste haben zum Sortieren. Erstellen tust du eine zb „Lisst1“ aber füllen tust du sie nicht.
hab schnell am Handy getippt, um die Zeit nicht zu verlieren. Das kommt natürlich dazu:
list1.add(p1);
list1.add(p2);
list1.add(p3);
Du brauchst eine vergleichst Liste die die gleichen Elemente der zu sortierenden Liste in der richtigen Reihenfolge hat. Hast du auch nicht.
und auch die andere Liste:
sollList.add(p1);
sollList.add(p1);
sollList.add(p1);
Du erstellt neue Elemente von Person aber der Liste gibst du sie nicht .
oben hinzugefügt
Und in der Vergleichs Liste hast du wieder neue Objekt . Da willst du ja die gleichen Objekte in der richtigen Reihenfolge haben zum vergleich.
richrig.
test.sorted(list1);
Selbst wenn die Methode richtig sortiert wird der Test nicht True liefern.
genau das ist meine Frage, wie ich die richtige Sortierung testen kann? Vielen Dank

außerdem hat die Methode sorted() void als Rückgabetyp
wie kann ich diese sorted()-Methode testen?

Java:
public void sorted() {
        List<Person> list = createList();

        List<Person> sortedList = list.stream()
                .sorted(Comparator.comparingInt(Person::getA))
                .collect(Collectors.toList());
    }
 
Zuletzt bearbeitet:
Java:
public void sorted() {
        List<Person> list = createList();

        List<Person> sortedList = list.stream()
                .sorted(Comparator.comparingInt(Person::getA))
                .collect(Collectors.toList());
    }
was hast du von der Methode die sortirt etwas und das wird nicht benutzt. Sinnlose Methode

Dann vielleicht die Liste als Instanzvariable und nicht lokal.

Der Methode auch die zu sortierende Liste auch übergeben und nicht in der Methode selber erzeugen.
Dann könntest du die übergebene auch bearbeiten und prüfen.
 
Zuletzt bearbeitet:
Java:
public void sorted( List  list) {
            list  = list.stream()
                .sorted(Comparator.comparingInt(Person::getA))
                .collect(Collectors.toList());
    }
so hättest du zu mindestens eine Möglichkeit etwas zu prüfen.
 
Java:
public void sorted( List  list) {
            list  = list.stream()
                .sorted(Comparator.comparingInt(Person::getA))
                .collect(Collectors.toList());
    }
so hättest du zu mindestens eine Möglichkeit etwas zu prüfen.
Vielen Dank.
Ok, gehen wir weiter, da kann ich folgendes tun, tippe am Handy:

Java:
public void sorted(){
         //sortiert eine locale liste
         sorted(list);
}

public void sorted(List list){
         //sortiert irgendeine Liste
...
}

wie kann ich nun sorded(list) testen ;-)?
 
Bei jedem Test hast du - wie im anderen Therad beschrieben:
  • Vorbereitung eines Zustandes
  • Dann die Aktion
  • Dann den Test, ob die Aktion erfolgreich war.

Also bei einer Methode sort(List) (sorted ist ein Adjektiv und kein Verb! Methoden sollten immer ein Verb beinhalten und ausdrücken, was sie tun. Hier sortiert die Methode etwas:

  • Schaffen einer List, die nicht sortiert ist
  • Aufrufen: sort(list)
  • Prüfen, ob die Liste sortiert ist.

Und da sollte man sich auch überlegen, was man alles testen könnte:
  • Liste ist schon sortiert -> darf nicht verändert werden
  • Ganz am Anfang ist ein Element, das nach hinten muss
  • Ganz am Ende ist ein Element, das weiter nach vorne muss.
Das nur um ein paar Anhaltspunkt zu geben. Aber natürlich auch immer das typische:
  • Leere Liste
  • Liste mit nur einem Element

Du du etwas vorgibst, kannst Du das auch alles selbst testen. Du kannst also aufrufen:
Java:
List<Integer> list = List.of(3, 2, 1);
ListUtils.sort(list);
assertAll(
    () -> assertEquals(1, list.get(0)),
    () -> assertEquals(2, list.get(1)),
    () -> assertEquals(3, list.get(2)),
    () -> assertEquals(3, list.size())
);

Das wäre die ganz primitive Prüfung. Wenn das durch andere Methoden auch schon geprüft werde könnte, dann kannst Du die ggf. auch nutzen.
 

Neue Themen


Zurück
Oben