Test-Methoden schreiben

LucaToni

Aktives Mitglied
Code:
public double flaecheninhaltDreieck(double g, double h)
{
        return g * h / 2;
    }

Wie kann ich zu dieser Methode eine Testmethode schreiben?

Ich verstehe den Sinn davon nicht ganz von Testmethoden... Das kann man ja einfach überprüfen ohne jetzt eine Methode dafür zu schreiben.
 

httpdigest

Top Contributor
Du testest diese Methode mit ein paar (ausgedachten) Werten für g und h und prüfst, ob auch das erwartete Ergebnis zurückkommt. Betrachte die Methode einfach als Blackbox, von der du die Implementierung nicht kennst.
 

Kirby.exe

Top Contributor
Java:
public static void main(String[] args){
    System.out.println(flaecheninhaltDreieck(2.0,4.0));
}
 

LucaToni

Aktives Mitglied
Code:
   public void flaecheninhaltDreieckTest()
    {
    Formelsammlung f1=new Formelsammlung();
    assertEquals(180.5,f1.flaecheninhaltDreieck(19.0,19.0),0.001);
    }
TEST ERFOLGREICH

Was bringt mir das jetzt aber?

:D
 

Dimax

Top Contributor
das bringt nichts wen du alles richtig eingibst versuch aber sowas
Code:
 assertEquals(180,f1.flaecheninhaltDreieck(19.A,-19.0),0.001*0/2);
 

LucaToni

Aktives Mitglied
das bringt nichts wen du alles richtig eingibst versuch aber sowas
Code:
assertEquals(180,f1.flaecheninhaltDreieck(19.A,-19.0),0.001*0/2);

Ja, da wird Test nicht erfolgreich sein... aber.... DAS WEISS MAN DOCH VORHER...Warum schreibt man für sowas eine Testmethode?
Könntet Ihr mir ein Beispiel geben wo man es nicht vorher weiß und eine Testmethode schreiben muss..
Ich muss ja das Ergebnis einer Berechnung kennen, bzw den Rechenweg, damit ich das beurteilen kann... ansonsten kann ich ja nicht wissen, dass die Methode zum Beispiel hier zwei Parameter erwartet... und mit einem Parameter funktioniert die Methode nicht...
 

httpdigest

Top Contributor
Man schreibt Tests, um Regression (etwas, was früher einmal funktioniert hat, funktioniert jetzt nicht mehr) zu vermeiden. Wenn also jemand auf die Idee kommt, die Methode flaecheninhaltDreieck() anzupassen, zu optimieren oder sonstwie zu ändern, und dabei einen Fehler macht, dann finden Tests solche Fehler.
Das Ganze bringt dir etwas, wenn du über einen längeren Zeitraum an einer Library bzw. einem Projekt arbeitest. Da passieren immer mal hier und da Anpassungen und man möchte sich vor Fehlern durch solche Anpassungen schützen.
 

LucaToni

Aktives Mitglied
Man schreibt Tests, um Regression (etwas, was früher einmal funktioniert hat, funktioniert jetzt nicht mehr) zu vermeiden. Wenn also jemand auf die Idee kommt, die Methode flaecheninhaltDreieck() anzupassen, zu optimieren oder sonstwie zu ändern, und dabei einen Fehler macht, dann finden Tests solche Fehler.
Das Ganze bringt dir etwas, wenn du über einen längeren Zeitraum an einer Library bzw. einem Projekt arbeitest. Da passieren immer mal hier und da Anpassungen und man möchte sich vor Fehlern durch solche Anpassungen schützen.

Die Antwort macht die Sache schon schlüssiger für mich. DANKE schonmal dafür.
 

LimDul

Top Contributor
Ein weiterer Vorteil ist, man deckt leichter Flüchtigkeitsfehler auf. Hatte ich erst heute in Code von mir.

Eingabe eine Adresse, die dann durch einen externen Service auf korrektheit geprüft werden soll.
Wenn ich also im UI irgendein Feld der Adresse ändere, muss die Adresse als "Ungeprüft" markiert werden.
Das hatte ich beim schreiben bei fast allen Felder auch gemacht - nur beim Ort hatte ich es vergessen. Als ich die Tests geschrieben habe, ist das dann sofort aufgefallen. Und die ganzen Konstellationen testest man im UI nicht in der Gründlichkeit durch, wie man Testfälle schreibt.

Mit Testfällen kann man auch viel viel schneller verschiedene Konstellationen abdecken. Was ist z.B. bei deiner Methode mit negativen Höhen/Grundflächen? Was ist wenn Höhe oder Grundfläche 0 ist?

Wenn ich Unit-Tests schreibe, lege ich immer viel Wert auf Eingabeparameter die nicht offensichtlich richtig sind. Das heißt, was ist wenn man null bergibt? Was ist wenn bei bei Zahlen negative Werte oder 0 übergibt? Was ist wenn man bei Strings einen Leerstring übergibt? Man stellt so oft beim Test schreiben fest, dass man in der Entwicklung ein paar Sonderkonstellationen übersehen hat.

Das Ziel sollte nicht sein eine Testmethode für eine Methode zu schreiben - sondern viele Testmethoden für unterschiedliche Konstellationen.
 

LucaToni

Aktives Mitglied
Ein weiterer Vorteil ist, man deckt leichter Flüchtigkeitsfehler auf. Hatte ich erst heute in Code von mir.

Eingabe eine Adresse, die dann durch einen externen Service auf korrektheit geprüft werden soll.
Wenn ich also im UI irgendein Feld der Adresse ändere, muss die Adresse als "Ungeprüft" markiert werden.
Das hatte ich beim schreiben bei fast allen Felder auch gemacht - nur beim Ort hatte ich es vergessen. Als ich die Tests geschrieben habe, ist das dann sofort aufgefallen. Und die ganzen Konstellationen testest man im UI nicht in der Gründlichkeit durch, wie man Testfälle schreibt.

Mit Testfällen kann man auch viel viel schneller verschiedene Konstellationen abdecken. Was ist z.B. bei deiner Methode mit negativen Höhen/Grundflächen? Was ist wenn Höhe oder Grundfläche 0 ist?

Wenn ich Unit-Tests schreibe, lege ich immer viel Wert auf Eingabeparameter die nicht offensichtlich richtig sind. Das heißt, was ist wenn man null bergibt? Was ist wenn bei bei Zahlen negative Werte oder 0 übergibt? Was ist wenn man bei Strings einen Leerstring übergibt? Man stellt so oft beim Test schreiben fest, dass man in der Entwicklung ein paar Sonderkonstellationen übersehen hat.

Das Ziel sollte nicht sein eine Testmethode für eine Methode zu schreiben - sondern viele Testmethoden für unterschiedliche Konstellationen.

Dann kann man doch aber für alles Mögliche unendlich viele Testmethoden schreiben... ist das Sinn der Sache?
 

LimDul

Top Contributor
Nein, nicht unendlich viele - aber sinnvoll viele. Man muss über die Eingabeparameter sinnvolle Äquivalenzklassen bilden. Das kann bei Zahlen oft sein: Eine Kleiner 0, 0, eine größer 0. ggf. noch INT_MAX/INT_MIN dazu, sofern sinnvoll.

Bei Strings ist es oft null, Leerstring, gefüllter String, etc. Es ist oft so, dass die Testklassen mehr Code haben als der eigentliche Code, das ist aber vollkommen in Ordnung.
 

mihe7

Top Contributor
Dann kann man doch aber für alles Mögliche unendlich viele Testmethoden schreiben... ist das Sinn der Sache?
Nein, Tests sind keine Korrektheitsbeweise. Die erste Frage ist ja schon einmal, welchen Zweck der Test erfüllen soll.

Während mit im Nachhinein geschriebener Tests in erster Linie die Einhaltung der Anforderungen getestet wird, verfolgt das TDD m. E. das Ziel, ein besseres Design zu erzielen.

Grundsätzlich werden aber immer nur bestimmte Aspekte getestet, was die Auswahl der Testdaten und -fälle entsprechend einschränkt. Beispielsweise wäre im Fall der Flächenberechnung eines Dreiecks kein Fehlverhalten zwischen den Eingabewerten 2, 3 sowie 20, 30 zu erwarten, da man sich in der gleichen Größenordnung bewegt. Anders sieht es aus, wenn Du große Werte oder welche verwendest, die sehr nah an 0 sind. Da kann es schnell mal zu Überläufen oder nicht hinnehmbaren Ungenauigkeiten kommen. Ähnliches gilt für 0 und negative Werte. Alles Dinge, wo man sich Probleme vorstellen könnte.

Noch eine Warnung: fang nicht an, Tests für konkrete Implementierungen zu schreiben, sondern für das Verhalten. Ansonsten bekommst Du Abhängigkeiten zum Code, die Dich beim Entwickeln nur behindern.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Frage zu Test-Driven Development (TDD) Java Basics - Anfänger-Themen 3
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
D Hilfe bei Calculator Test Java Basics - Anfänger-Themen 15
U jUnit 5 Test für eine addMethode Java Basics - Anfänger-Themen 18
M Test auf Exceptions schreiben Java Basics - Anfänger-Themen 11
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
I Variable innerhalb Methode: Local variable test defined in an enclosing scope must be final or effectively final Java Basics - Anfänger-Themen 3
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 JUnitTest Best Practise (Ein Assert pro Test?) Java Basics - Anfänger-Themen 10
P Methoden JUnit 4 - Test Java Basics - Anfänger-Themen 6
Mr_Kleeblatt Operatoren if (arri[i] != "test.java"&& arri[i] != "test.class") Java Basics - Anfänger-Themen 3
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
D Test auf Dopplungen Java Basics - Anfänger-Themen 32
neerual Klassen Wie rufe ich Klassen, die andere Klassen extenden in einer Test Unit auf? Java Basics - Anfänger-Themen 10
B JUnit Test erstellen Java Basics - Anfänger-Themen 6
B zzz.test Java Basics - Anfänger-Themen 13
W Problem bei JUnit Test Aufgabe Java Basics - Anfänger-Themen 15
W JUnit Test und HashCode Java Basics - Anfänger-Themen 14
C Erste Schritte Hexidezimal-Test 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
B Palindrom Test mit Junit Java Basics - Anfänger-Themen 23
T Minesweeper Test Java Basics - Anfänger-Themen 2
S Junit Test Java Basics - Anfänger-Themen 2
F Test Java Basics - Anfänger-Themen 12
W Ist das ein legitimer Test? Java Basics - Anfänger-Themen 5
shiroX Methoden JUnit-Test einer void-Methode Java Basics - Anfänger-Themen 4
U Best Practice Datenbereitstellung Unit Test Java Basics - Anfänger-Themen 6
B Binäre Suche - Junit Test Java Basics - Anfänger-Themen 6
B Datentypen Test float und double speichern Zahlen nur ungefähr Java Basics - Anfänger-Themen 4
Z Vererbung Test auf Normalverteilung, Wilcoxon Java Basics - Anfänger-Themen 3
M Assertion NotNull Test Java Basics - Anfänger-Themen 3
S Separate Funktion für JUnit-Test Java Basics - Anfänger-Themen 3
W Test, ob Datei existiert, schlägt fehl Java Basics - Anfänger-Themen 4
T JUnit test failed Java Basics - Anfänger-Themen 3
H Array Test Methode schreiben Java Basics - Anfänger-Themen 3
R JUnit Test mit einer Dateistruktur als Testparameter Java Basics - Anfänger-Themen 3
V Bruchrechner Test Java Basics - Anfänger-Themen 7
T Test läuft schief Java Basics - Anfänger-Themen 3
shiroX OOP Array kleinste Zahl mit jUnit test Java Basics - Anfänger-Themen 3
G mache aus Test nach sortieren estt oder java aajv Java Basics - Anfänger-Themen 5
S Code stimmt nicht für vorgegebenen JUnit-Test Java Basics - Anfänger-Themen 2
x22 Java Multiple Choice Test Java Basics - Anfänger-Themen 8
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
N Test mit assert Java Basics - Anfänger-Themen 9
Y Junit Test - Testwert ändert sich Java Basics - Anfänger-Themen 12
K Palindrom Test Java Basics - Anfänger-Themen 9
S Performance-/Stress Test für Webanwendung Java Basics - Anfänger-Themen 2
V Mediaplayer - NullPointerException bei Unit-Test Java Basics - Anfänger-Themen 4
H Ich kann mein Java Programm Test.class nicht ausführen Java Basics - Anfänger-Themen 6
H Javabefehl Test Java Basics - Anfänger-Themen 3
S Hilfe zu Java-Programm und JUnit Test!! Java Basics - Anfänger-Themen 5
T JUNit Test IOException Java Basics - Anfänger-Themen 5
H lucas-test Java Basics - Anfänger-Themen 14
P White-Box-Test Verständnisproblem Java Basics - Anfänger-Themen 11
N Methoden Test ob Server vorhanden ist Java Basics - Anfänger-Themen 4
N Test Datei = Bild Java Basics - Anfänger-Themen 5
S Erste Schritte 1. Test Programm Java Basics - Anfänger-Themen 21
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
E Am Mittwoch Test und ich checks überhaupt nich Java Basics - Anfänger-Themen 27
A junit test wann verwendet man "was"? Java Basics - Anfänger-Themen 4
J JUnit Test Java Basics - Anfänger-Themen 2
D Test einer Chipkarte Java Basics - Anfänger-Themen 2
J Problem mit Test-Klasse Java Basics - Anfänger-Themen 4
E Test, ob String in Double umwandelbar ist Java Basics - Anfänger-Themen 3
J Test steht vor der Tür !! Java Basics - Anfänger-Themen 2
X Array nur mit Zahlen (test) Java Basics - Anfänger-Themen 11
Houly JUnit Test Suite anlegen Java Basics - Anfänger-Themen 6
F Primitiver Lucas-Lehmer-Test hängt sich auf Java Basics - Anfänger-Themen 7
M Erster HashMap-test Java Basics - Anfänger-Themen 5
O Test auf JComponent Java Basics - Anfänger-Themen 7
pun Junit Test erkennt Exception nicht.. Java Basics - Anfänger-Themen 14
D C0 und C1 Test nochmal Java Basics - Anfänger-Themen 9
D C0 und C1 Test Java Basics - Anfänger-Themen 3
G BlueJ jUnit Test Java Basics - Anfänger-Themen 6
J Test auf UTF-8 Java Basics - Anfänger-Themen 2
M Wo und wie speich. ich .java und wo den zugehörigen test? Java Basics - Anfänger-Themen 2
Shalimar Test, ob mehr pos. oder neg. Zahlen Java Basics - Anfänger-Themen 3
M test Java Basics - Anfänger-Themen 5
M test Java Basics - Anfänger-Themen 2
M test Java Basics - Anfänger-Themen 10
V Test mit JUnit verbinden Java Basics - Anfänger-Themen 3
M test Java Basics - Anfänger-Themen 4
H Miller Rabin Test Primzahlen werden teilweise nicht gefunden Java Basics - Anfänger-Themen 5
C Multiple Choice Test Java Java Basics - Anfänger-Themen 5
G Grundfläche färben, ein Bild (NORTH) ind Test darunter? Java Basics - Anfänger-Themen 6
M Palindrom Test mit Char-arrays! Java Basics - Anfänger-Themen 3
M Java Test Übungsfragen Hilfe! Java Basics - Anfänger-Themen 5
B JUnit Test Klasse Rational Java Basics - Anfänger-Themen 12
N class Test<E extends MyAbstractClass> => typ von E? Java Basics - Anfänger-Themen 5
G jar cvf test.war -C src/ WEB-INF -C src/ ALLE JSP Wildcard? Java Basics - Anfänger-Themen 2
0 Quadratzahl-Test Java Basics - Anfänger-Themen 4
C Unsupported major.minor bei jUnit Test Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben