jUnit 5 Test für eine addMethode

uppss

Aktives Mitglied
Java:
Hallo Jungs,

ich muss eine Testmethode schreiben und prüfen, ob nur eindeutige Personen hinzugefügt werden können.
@Test
public void test_addPerson_liefert_true() {
    Person p1 = new Person("name1, 1);
    Assertions.assertTrue(test.addPerson(p1));
}

Nun möchte ich die andere Seite der Medaille testen und zwei identische Personen hinzufügen wie gehe ich damit am besten um?
@Test
public void test_addPerson_liefert_false() {
    Person p1 = new Person("name1, 1);
    Assertions.assertTrue(test.addPerson(p1));
    Assertions.assertFalse(test.addPerson(p1));
}
 

KonradN

Super-Moderator
Mitarbeiter
Vom Prinzip her ist es doch schon das, was du brauchst. Musst Du nur in eine Form bringen, die übersetzbar ist. Und Du musst die Spezifikation genau prüfen - was am Status kannst Du alles prüfen? Ggf. prüft man auch Dinge wie: Ist die Anzahl der Elemente unverändert nach der zu testenden Aktion.

Und was auch auffällt: Du testest in dem Test nicht nur das Hinzufügen einer bereits vorhandenen Person sondern auch das erste Hinzufügen. Das kann - wenn man strenge Regeln hat - auch schon als unerwünscht angesehen werden.
 

KonradN

Super-Moderator
Mitarbeiter
Was für Beispiele brauchst Du hier noch? Du hast ja in Deinem Code die Tests eigentlich schon - wenn man mal davon absieht, dass die Variable test nicht deklariert & initialisiert wurde.

Daher sehe ich gerade nicht, an welchem Punkt es gerade bei Dir "hängt" und was ich Dir daher zeigen könnte.

Evtl. paar Sourcen für Bücher / Dokumentation:
  • https://riptutorial.com/ebook/junit ist ein kleines, freies Werk
  • JavaCodeGeeks bietet eine kostenlose Registrierung und danach hat man Zugriff auf viele (teilweise ältere) EBooks. Darunter auch welche zu JUnit und Mocking (nur JUnit 4 meine ich). Aber man bekommt da dann auch regelmäßig Werbung und Infos per Email. Die Seite bietet darüber auch noch etwas mehr und die Emails von Zeit zu Zeit sind da ein kleiner Preis denke ich (Ich habe damit keine Probleme).
  • JUnit 5 User Guide: https://junit.org/junit5/docs/5.6.2/user-guide/index.pdf

Das wären paar freie Quellen - es gibt aber auch ein paar gute Bücher zu JUnit 5, die interessant sein könnten so man Bücher bevorzugt. Ansonsten findet man sehr viel Einführungen und Erklärungen per Google.
 

uppss

Aktives Mitglied
Hallo Konrad,
Vielen Dank für hilfsreiche tipps.

Das Problem bei meinem Test besteht darin, dass p1 immer neu hinzugefügt wird und ich nur einmal testen kann. Ich habe noch kein Plan, wie ich die liste aus +1, +2 ect. testen kann. Das die Liste größer geworden ist, bzw. unverändert geblieben ist…

@test
public void test_addPerson_liefert_false() {
Person p1 = new Person("name1, 1);
//test ist zu testende klasse
Assertions.assertTrue(test.addPerson(p1));
Assertions.assertFalse(test.addPerson(p1));
}
 

KonradN

Super-Moderator
Mitarbeiter
Hallo Konrad,
Vielen Dank für hilfsreiche tipps.

Das Problem bei meinem Test besteht darin, dass p1 immer neu hinzugefügt wird und ich nur einmal testen kann. Ich habe noch kein Plan, wie ich die liste aus +1, +2 ect. testen kann. Das die Liste größer geworden ist, bzw. unverändert geblieben ist…
Wie sieht denn der ganze Test aus? Wo ist denn die Variable test Deklariert und Initialisiert worden?

Das sollte alles Bestandteil des Tests selbst sein!
 

Jw456

Top Contributor
Zeige bitte auch die Klasse in der die Methode addPerson ist. Und wie schon gesagt, wie du zu der Instanz test kommst.
 

uppss

Aktives Mitglied
Java:
import com.java.testpolygon.domain.Person;

public interface PersonService {

    public boolean addPerson(Person argPerson);

}
Java:
package com.java.testpolygon.personservice;

import com.java.testpolygon.domain.Person;

import java.util.ArrayList;
import java.util.List;

public class PersonServiceImpl implements PersonService{

    @Override
    public boolean addPerson(Person argPerson) {
        List<Person> list = new ArrayList<>();
        if (list.contains(argPerson)) {
            return list.add(argPerson);
        }
        return false;
    }
}

Java:
package com.java.testpolygon.domain;

public class Person {

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object obj) {
        boolean result = false;
        if (obj == null || obj.getClass() != getClass()) {
            return false;
        } else {
            Person person = (Person) obj;
            if (this.name.equals(person.getName())) {
                result = true;
            }
        }
        return result;
    }
}

Java:
package com.java.testpolygon.personservice;

import com.java.testpolygon.domain.Person;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

public class PersonServiceImplTest {

    @Test
    public class testAddPerson() {
        Person person = new Person("a", 1);
        PersonServiceImpl test = new PersonServiceImpl();
        Assertions.assertTrue(test.addPerson(person)); // OK
        Assertions.assertFalse(test.addPerson(person)); // NOK

    }
}
 

KonradN

Super-Moderator
Mitarbeiter
Du hast kein Problem mit dem Unit-Test sondern mit der Implementation. Deine Implementation von PersonServiceImpl ist einfach falsch.
 

uppss

Aktives Mitglied
Konrad danke für die Antwort. Was würdest du da anders machen?
Die Vorgabe ist, dass Person genau nur einmal da sein darf und die Methode true zurückliefen soll, wenn er zur Collection erfolgreich hinzugefügt wurde
 

KonradN

Super-Moderator
Mitarbeiter
Dann schau Dir Deine Methode addPerson einmal im Detail an. Was passiert denn da? Welche Lebensdauer hat denn die Liste?
 

uppss

Aktives Mitglied
local, ich habe die Liste rasgenommen und global deklariert:
trotzdem:

Java:
public class PersonServiceImpl implements PersonService{

    List<Person> list = new ArrayList<>();
    
    @Override
    public boolean addPerson(Person person) {
        if (list.contains(argPerson)) {
            return list.add(person);
        }
        return false;
    }
}

Expected :false
Actual :true
 

KonradN

Super-Moderator
Mitarbeiter
Erst einmal übersetzt der gezeigte Code so nicht.

Und dann geh einmal die gezeigte Logik durch. Was soll wann passieren?
 

uppss

Aktives Mitglied
Es soll eine eindeutige Person zu einer Collection hinzugefügt werden und die Methode soll true zurückliefen, falls diese Person hinzugefügt wurde und false, falls die Person schon in der Collection vorhanden war.
 

KonradN

Super-Moderator
Mitarbeiter
Das ist die Anforderung - aber was macht Dein Code? Schau was Dein Code macht.
Füge ansonsten zu Allem ein Kommentar hinzu, das den Code Deiner Meinung nach erläutert.
 

uppss

Aktives Mitglied
Java:
List<Person> list = new ArrayList<>();
public boolean addPerson(Person person) {
        if (list.contains(person)) { // wenn vorhanden, dann false
            return false;
        } else {
            return list.add(argPerson); // sonst einfügen und true zurückliefern
        }
    }
 

uppss

Aktives Mitglied
Ja, vielen Dank. Könntest du mir vlt. noch zeigen, wie man adden auf moderne Art und weite mit Streams realisieren könnte und was man noch testen kann. Vielen Dank
 

KonradN

Super-Moderator
Mitarbeiter
Wenn Du Deine Klasse auch mit Streams nutzen können willst, dann schau Dir einfach einmal an, was da so an Möglichkeiten vorhanden sind. Wenn Du Elemente eines Streams einsammeln willst, dann wird ja collect benutzt. Da kannst Du also schauen, was da so benötigt wird.

Ansonsten musst Du Dir überlegen, was für Funktionalität du haben willst. Und jede Funktionalität, die Du hinzu fügst, musst Du dann auch testen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Junit Test für MysqlDataSource JDBC Java Basics - Anfänger-Themen 3
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
S Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
W junit.Test not accessible? Java Basics - Anfänger-Themen 4
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
A Test Junit Java Basics - Anfänger-Themen 1
H Junit test Java Basics - Anfänger-Themen 12
P Methoden JUnit 4 - Test Java Basics - Anfänger-Themen 6
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
S Junit Test Java Basics - Anfänger-Themen 2
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
T JUnit test failed Java Basics - Anfänger-Themen 3
R JUnit Test mit einer Dateistruktur als Testparameter Java Basics - Anfänger-Themen 3
shiroX OOP Array kleinste Zahl mit jUnit test Java Basics - Anfänger-Themen 3
R JUnit Test mit mehrfach ausgeführt Java Basics - Anfänger-Themen 6
B JUnit - Mini-Test Java Basics - Anfänger-Themen 9
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
Y Junit Test - Testwert ändert sich Java Basics - Anfänger-Themen 12
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
T JUNit Test IOException Java Basics - Anfänger-Themen 5
Spin JUNIT Test Case - Problem bei testen Java Basics - Anfänger-Themen 2
T brauche HILFE beim Junit test:eek: Java Basics - Anfänger-Themen 11
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
J JUnit Test Java Basics - Anfänger-Themen 2
Houly JUnit Test Suite anlegen Java Basics - Anfänger-Themen 6
pun Junit Test erkennt Exception nicht.. Java Basics - Anfänger-Themen 14
G BlueJ jUnit Test Java Basics - Anfänger-Themen 6
V Test mit JUnit verbinden Java Basics - Anfänger-Themen 3
B JUnit Test Klasse Rational Java Basics - Anfänger-Themen 12
C Unsupported major.minor bei jUnit Test Java Basics - Anfänger-Themen 2
6 Best Practice Feedback zu Service / JUnit Tests Java Basics - Anfänger-Themen 3
M Anfängerfehler - Tests JUnit IntelliJ Java Basics - Anfänger-Themen 24
D Cannot find JUnit.framework Java Basics - Anfänger-Themen 1
U JUnit testen auf SomeException Java Basics - Anfänger-Themen 5
A JUnit testing is inkonsistent Java Basics - Anfänger-Themen 12
P Probleme mit JUnit-Tests, es kommt was anderes raus als bei manuellen Tests Java Basics - Anfänger-Themen 5
Y Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen? Java Basics - Anfänger-Themen 1
B JUnit 4: Wie man die eigene Liste testen kann [TDD] Java Basics - Anfänger-Themen 46
W JUnit Tests Java Basics - Anfänger-Themen 4
hello_autumn Klassen Anzahl sowie die Anzahl der Junit Tests ermitteln? Java Basics - Anfänger-Themen 8
B JUnit / Exceptions/ try-catch Java Basics - Anfänger-Themen 6
L JUnit tests in java Java Basics - Anfänger-Themen 5
N JUnit und private Methoden testen. Java Basics - Anfänger-Themen 9
F JUnit - Was ist mit "side effects" gemeint ? Java Basics - Anfänger-Themen 2
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
L Junit Testing bei XML? Java Basics - Anfänger-Themen 3
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
O JUnit - Objektreferenzen Java Basics - Anfänger-Themen 3
G Testen mit JUnit Java Basics - Anfänger-Themen 4
C JUnit Tests. How to Java Basics - Anfänger-Themen 5
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
L Junit Tests Java Basics - Anfänger-Themen 10
A IllegalArgumentException in JUnit testen Java Basics - Anfänger-Themen 3
V ToString-Methode mit JUnit testen(BlueJ) Java Basics - Anfänger-Themen 10
V JUnit Klassen Java Basics - Anfänger-Themen 3
T Junit Mockito: Instanz von inneren erzeugten Objekten Java Basics - Anfänger-Themen 4
S JUnit - Swing- Anwendung wird nicht neu gestartet Java Basics - Anfänger-Themen 0
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
M JUnit Testmethoden mit mehreren assert Methoden Java Basics - Anfänger-Themen 1
S Double und Gleitkommazahlen mit JUnit testen Java Basics - Anfänger-Themen 7
K JUnit: Objekte von eigenen Klassen vergleichen...geht nicht Java Basics - Anfänger-Themen 5
Z JUnit Exception Java Basics - Anfänger-Themen 2
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
M Ist die Hamcrest Bibliothek auch schon in Junit 4.11 verfügbar? Java Basics - Anfänger-Themen 1
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
M Reihenfolge von Testmethoden in JUnit beeinflussen Java Basics - Anfänger-Themen 2
G JUnit-Tests im Programmdurchlauf starten Java Basics - Anfänger-Themen 4
T Best Practice JUnit: Wie Klassen durch Stubs/Mockups ersetzen Java Basics - Anfänger-Themen 7
M Junit Tests durchführen, die eine Verbindung zu einer Daten erfordern Java Basics - Anfänger-Themen 3
T Junit in Eclipse Java Basics - Anfänger-Themen 1
P JUnit bedeutungen Java Basics - Anfänger-Themen 3
S JUnit assertEquals funktioniert nichgt wie es sollte :( Java Basics - Anfänger-Themen 7
V Frage zu JUnit Tests Java Basics - Anfänger-Themen 3
B JUnit für JFileChooser Java Basics - Anfänger-Themen 6
S File vergleich - Junit Java Basics - Anfänger-Themen 6
T JUnit Java Basics - Anfänger-Themen 18
G Junit Java Basics - Anfänger-Themen 4
X JUnit testing Java Basics - Anfänger-Themen 7
T JUnit Suite frage Java Basics - Anfänger-Themen 6
S InvocationTargetException bei JUnit Testlauf Java Basics - Anfänger-Themen 2
T Junit --Exception testen Java Basics - Anfänger-Themen 15
A JUnit Tests in Jar-Archiv packen Java Basics - Anfänger-Themen 2
G Erste Schritte JUNIT Regressionstests automatisieren Java Basics - Anfänger-Themen 2
M JUnit - nur einzelne Methode testen? Java Basics - Anfänger-Themen 4
M JUnit - nur Failures loggen? Java Basics - Anfänger-Themen 2
R String Replace für JUnit Java Basics - Anfänger-Themen 19
T JUNIT Nullpointerexception Java Basics - Anfänger-Themen 3
M JUNIT tests mit ant script ausführen Java Basics - Anfänger-Themen 4
S [JUnit] eigener Testsuite Runner + Ausgabe Java Basics - Anfänger-Themen 6
S [JUnit] Print Results while running Java Basics - Anfänger-Themen 6
W Mit jUnit Array testen? Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben