JUnit und private Methoden testen.

needInput

Mitglied
Ich lerne JUnit erst seit kurzem und möchte gerne das return einer privaten Methode testen.
Die private Methode wird in der Methode aufgerufen, welche ich testen möchte.

Java:
//zu testende Methode ist jump
public void jump(Board board){
    //this.sortingHashMapByValue ist die private Methode bei der ich testen möchte,
    //ob die Hashmap sortiert zurück kommt.
    LinkedHashMap<TransportNode, Double> sortedPlaces = this.sortingHashMapByValue(closestPaths);
}

Wie komme ich an die Liste in meiner Test Klasse ran, welche sortingHashMapByValue zurückliefert?

Danke schon einmal im Voraus:)
 

Barista

Top Contributor
Du kannst den privaten Teil in eine eigene Klasse auslagern.

In Deiner eigentlichen Klasse ist die dann in einer lokalen Variable oder privaten Member.

Das Zusammenbauen von neuer und alter Klasse ist dann zwar wiederum ungeprüft, aber Du hast ja außerdem Tests für Deine äußere Klasse.
 

thecain

Top Contributor
Wieso sollte er das machen? Das macht doch keinen Sinn nur! für die Testbarkeit eine eigene Klasse zu machen.

Die private Methode wird sowieso aufgerufen und durchlaufen, wenn die public Methoden getestet werden. Falls nicht, kann er sie ja bedenkenlos einfach löschen.

void Methoden können entweder dadurch getestet werden, dass geprüft wird, ob sich der State der Klasse entsprechend geändert hat oder, falls Methoden anderer Klassen aufgerufen werden, in dem man die anderen Klassen mockt oder spyt.
 

mihe7

Top Contributor
du sagst beobachtbares Verhalten einer Methode
Nein, er schrieb das beobachtbare Verhalten einer Klasse. Mach nicht den Fehler, Tests für Methoden zu schreiben. Man testet keine Methoden, man implementiert Testfälle, die Methoden verwenden. Das ist ein kleiner Unterschied, der große Auswirkungen hat.

Sagen wir mal, Du möchtest Tests für eine Liste schreiben. Dann wird die Klasse eine Methode für das Hinzufügen, sagen wir mal add, und Du wirst wenigstens einen Test für das Hinzufügen schreiben. Der Test testet aber nicht die Methode add() sondern das Hinzufügen. Hier sind schon einmal zwei grundsätzliche Fälle zu unterscheiden:
1. das Element war vor dem Hinzufügen bereits in der Liste vorhanden. Dann soll sich durch das Hinzufügen die Liste nicht verändern.
2. das Element war vor dem Hinzufügen noch nicht in der Liste, dann soll es nach dem Hinzufügen in der Liste sein, die Zahl der Elemente muss sich um 1 erhöht haben (und - wenn man will - der Rest der Liste darf sich nicht geändert haben).

Dafür kannst Du jeweils einen oder mehrere Tests schreiben. Diese decken dann aber nicht nur add() ab, sondern auch equals(), contains() und size(). Ein weiterer, davon unabhängiger Testfall könnte sein, dass eine neue Liste leer sein soll: isEmpty() und size() == 0.

Damit ist size() bzgl. neuer Listen und hinzugefügter Elemente bereits erschlagen. Du schreibst also nicht Tests für Methoden (testAdd, testSize, testContains, testEquals, testMethodeX, ...), sondern für das Verhalten.
 

Barista

Top Contributor
Wieso sollte er das machen? Das macht doch keinen Sinn nur! für die Testbarkeit eine eigene Klasse zu machen.

Es geht um separation of concerns.

Wenn man eine private Methode testen will, steckt darin wahrscheinlich eine testwürdige Funktionalität, die in der äusseren Klasse verbaut ist.

Durch eine eigene Klasse kann man diese Funktionalität explizit machen.

Eigentlich sollte Testbarkeit auch die Struktur verbessern.

Ich persönlich finde dies aber auch etwas seltsam.

Es wäre schon ganz gut, wenn Tests Sonder-Rechte hätten.
 

mrBrown

Super-Moderator
Mitarbeiter
Es geht um separation of concerns.

Wenn man eine private Methode testen will, steckt darin wahrscheinlich eine testwürdige Funktionalität, die in der äusseren Klasse verbaut ist.

Durch eine eigene Klasse kann man diese Funktionalität explizit machen.

Da nahezu alles testwürdige Funktionalität ist, hätte man am Ende pro privater Methode eine eigene Klasse. Dann hätte ich am Ende zehn mal so viele Klassen, und darunter so sinnvolle wie class LinkedListHeadCheck { boolean isHead(Node node) {return node.next == node && node.prev == node}}, für die ich extra die Kapselung aufweichen müsste...


Es wäre schon ganz gut, wenn Tests Sonder-Rechte hätten.
Im Zweifel nutzt man package-private und Annotiert das entsprechend, dass statische Checks bei missbrauch Fehler werfen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Verständnisfrage zu JUnit Tests und private Methoden Java Basics - Anfänger-Themen 3
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
W junit.Test not accessible? Java Basics - Anfänger-Themen 4
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
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
U JUnit testen auf SomeException Java Basics - Anfänger-Themen 5
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
A JUnit testing is inkonsistent Java Basics - Anfänger-Themen 12
A Junit Test für MysqlDataSource JDBC 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
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
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
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
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
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
L Junit Testing bei XML? Java Basics - Anfänger-Themen 3
J LocalDateTime testen mit Junit Java Basics - Anfänger-Themen 20
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
A Objekt in Methode zurückgeben, JUnit zeigt Error Java Basics - Anfänger-Themen 2
A Kfz - Händler Klasse. JUnit-Test gibt noch Fehler an, aber finde Ursache nicht Java Basics - Anfänger-Themen 7
O JUnit - Objektreferenzen Java Basics - Anfänger-Themen 3
G Testen mit JUnit Java Basics - Anfänger-Themen 4
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
C JUnit Tests. How to Java Basics - Anfänger-Themen 5
S Junit Test Java Basics - Anfänger-Themen 2
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
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
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
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
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 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
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
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
T JUnit test failed Java Basics - Anfänger-Themen 3
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
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
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 Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
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
R JUnit Test mit mehrfach ausgeführt Java Basics - Anfänger-Themen 6
S InvocationTargetException bei JUnit Testlauf Java Basics - Anfänger-Themen 2
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
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
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
T JUNit Test IOException Java Basics - Anfänger-Themen 5
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
T Junit Tests Java Basics - Anfänger-Themen 7
I JUnit Datapoints für mehrere Testklassen Java Basics - Anfänger-Themen 4
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
M Junit tests gehen nicht Java Basics - Anfänger-Themen 2
E OOP einfache Array Aufgabe mit jUnit Java Basics - Anfänger-Themen 5
L JUNIT Testing Java Basics - Anfänger-Themen 3
C jUnit: Erfahren, ob der getestete Code eine Exception gehandelt hat Java Basics - Anfänger-Themen 3
timbeau JUnit Test Dauer speichern/loggen Java Basics - Anfänger-Themen 16
turmaline JUnit testen ob keine Exception auftritt Java Basics - Anfänger-Themen 23
D JUnit auf Matrix anwenden Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben