Womit kann ich diese Methode testen?

Guten Tag.

Ich habe folgenden Code:

Java:
public void move(int deltaT) {
              
        if ( velocity.squaredLength() == 0 ) {
            velocity = new TwoDimVector(1,1);
        }
            
        position = position.add(velocity.scalarProduct(deltaT));
        
        if ( position.getX() < minX ) {
            position = new TwoDimVector(minX,position.getY());   
        }
        else if ( maxX <  position.getX() ) {
            position = new TwoDimVector(maxX,position.getY());
        }
        
        if ( position.getY() < minY ) {
            position = new TwoDimVector(position.getX(),minY);   
        }
        else if ( maxY < position.getY() ) {
            position = new TwoDimVector(position.getX(),maxY);
        }
    }

Wie kann ich diese Methode jetzt in einer Test Klasse testen? Ich habe das bis dato noch nie gemacht, kann mir jemand helfen?

MfG
 

Kirby.exe

Top Contributor
Naja also du müsstest deiner Methode einen int als Parameter übergeben.

Ungefähr so:
Java:
public static void main(String args[]){
int meineZahl = xyz;
move(int meineZahl);
}
 
K

kneitzel

Gast
Hallo,

die Details können von Unit-Test Framework zu Unit-Test Framework etwas unterschiedlich sein. Aber im Groben hast Du immer mehrere Parts, die ablaufen:
1. Eine Art Initialisierung. Du erschaffst Dir also Alles, das Du für einen Test benötigst.
2. Dann kommt der eigentliche Test. Also bei Dir der Aufruf von move auf einer vorbereiteten Instanz.
3. Dann kommen die Überprüfungen. Per Assert prüfst Du also, was die prüfbaren Werte sind und ob diese die Werte beinhalten, die Du erwartest.

Also so eine Testmethode kann dann z.B. so aussehen (Ich kenne keine Details ausser der move Methode, daher hab ich mal als Klassenname ein MyClass und zwei Sttribute someAttribute und someOtherAttribute genutzt....

Java:
@Test
public void testMoveMethod() {
    MyClass instance = new MyClass();
    instance.setSomeAttribute(1);
    instance.setSomeOtherAttribute(2);
    
    instance.move(1);
    
    Assert.assertEqual(1, instance.getSomeAttribute());
    Assert.assertEqual(7, instance.getSomeOtherAttribute());
}

Davon kann es mehrere Tests geben, denn Du musst Dir genug Test Szenarien überlegen, dass wirklich alles getestet wird. Also squaredLength() muss mal 0 sein und mal nicht.
getX muss dann mal < minX sein und mal nicht ....
u.s.w.

Das kannst Du auf unterschiedliche Weisen machen:
a) viele Tests. Dann hast ganz viele Test-Methoden. Hat den Vorteil: Alle Tests laufen durch und du siehst: Nur ein oder zwei sind schief gegangen.
b) Du kannst auch etwas "abkürzen". Dann testest Du mehrere Dinge hintereinander. Also nach dem instance.move(1) und den ganzen Asserts kommt dann der nächste move Aufruf (evtl. nachdem noch paar Attribute angepasst wurden.)
Aber: Sobald ein Assert fehl schlägt ist es in der Regel so, dass der Test an der Stelle abbricht. Also ein Problem stoppt dann die nachfolgenden Tests. Ein fehlgeschlagener Assert ist dann sozusagen wie eine Exception, die den Code abbricht.

Hilft Dir das etwas? Ansonsten bring einmal ein paar mehr Details. Ganze Klasse und welches Framework Du nutzen willst (JUnit würde ich vermuten, aber ich frage lieber einmal nach). Dann kann man das konkreter nachstellen.

Natürlich kann das noch deutlich komplexer werden: Dann kann man Initialisierungen raus ziehen aus der Testmethode, man kann später noch aufräumen .... Wenn man Abhängigkeiten nach außen hat, dann kommt schnell noch macking rein und so... Aber ich hoffe mal, dass es noch um wirklich einfache, erste Tests geht ohne solche Dinge. Sonst könnte es recht komplex werden.

Naja also du müsstest deiner Methode einen int als Parameter übergeben.

Ungefähr so:
Java:
public static void main(String args[]){
int meineZahl = xyz;
move(int meineZahl);
}
Ich finde es super, dass Du Dich auch einbringen möchtest um anderen zu helfen. Aber ich fürchte, dass er hier um automatische Unit Test ging (Daher Test Klasse). Und nur als kleiner Hinweis: Der move Aufruf ist nicht statisch, d.h. es wird eine Instanz benötigt. Und der Typ wird beim Aufruf nicht mit angegeben. Also da wäre dann sowas wie das notwendig:
Java:
public static void main(String args[]){
  int meineZahl = xyz;
  MyClass instance = new MyClass();
  instance.move(meineZahl); // Also auf einer Instanz aufrufen und das int musste weg.
}

Aber mach Dir nichts draus - das sind typische Dinge, die schnell mal schief gehen, wenn man Code in dem Forum-Editor schreibt. Und top, dass Du dir nun auch andere Fragen anschaust - so lernt man auch einiges und Du wirst dem Einen oder Anderen bestimmt auch helfen können also bleib bitte dabei und lass Dich nicht abschrecken oder so!
 

Kirby.exe

Top Contributor
Hallo,

die Details können von Unit-Test Framework zu Unit-Test Framework etwas unterschiedlich sein. Aber im Groben hast Du immer mehrere Parts, die ablaufen:
1. Eine Art Initialisierung. Du erschaffst Dir also Alles, das Du für einen Test benötigst.
2. Dann kommt der eigentliche Test. Also bei Dir der Aufruf von move auf einer vorbereiteten Instanz.
3. Dann kommen die Überprüfungen. Per Assert prüfst Du also, was die prüfbaren Werte sind und ob diese die Werte beinhalten, die Du erwartest.

Also so eine Testmethode kann dann z.B. so aussehen (Ich kenne keine Details ausser der move Methode, daher hab ich mal als Klassenname ein MyClass und zwei Sttribute someAttribute und someOtherAttribute genutzt....

Java:
@Test
public void testMoveMethod() {
    MyClass instance = new MyClass();
    instance.setSomeAttribute(1);
    instance.setSomeOtherAttribute(2);
   
    instance.move(1);
   
    Assert.assertEqual(1, instance.getSomeAttribute());
    Assert.assertEqual(7, instance.getSomeOtherAttribute());
}

Davon kann es mehrere Tests geben, denn Du musst Dir genug Test Szenarien überlegen, dass wirklich alles getestet wird. Also squaredLength() muss mal 0 sein und mal nicht.
getX muss dann mal < minX sein und mal nicht ....
u.s.w.

Das kannst Du auf unterschiedliche Weisen machen:
a) viele Tests. Dann hast ganz viele Test-Methoden. Hat den Vorteil: Alle Tests laufen durch und du siehst: Nur ein oder zwei sind schief gegangen.
b) Du kannst auch etwas "abkürzen". Dann testest Du mehrere Dinge hintereinander. Also nach dem instance.move(1) und den ganzen Asserts kommt dann der nächste move Aufruf (evtl. nachdem noch paar Attribute angepasst wurden.)
Aber: Sobald ein Assert fehl schlägt ist es in der Regel so, dass der Test an der Stelle abbricht. Also ein Problem stoppt dann die nachfolgenden Tests. Ein fehlgeschlagener Assert ist dann sozusagen wie eine Exception, die den Code abbricht.

Hilft Dir das etwas? Ansonsten bring einmal ein paar mehr Details. Ganze Klasse und welches Framework Du nutzen willst (JUnit würde ich vermuten, aber ich frage lieber einmal nach). Dann kann man das konkreter nachstellen.

Natürlich kann das noch deutlich komplexer werden: Dann kann man Initialisierungen raus ziehen aus der Testmethode, man kann später noch aufräumen .... Wenn man Abhängigkeiten nach außen hat, dann kommt schnell noch macking rein und so... Aber ich hoffe mal, dass es noch um wirklich einfache, erste Tests geht ohne solche Dinge. Sonst könnte es recht komplex werden.


Ich finde es super, dass Du Dich auch einbringen möchtest um anderen zu helfen. Aber ich fürchte, dass er hier um automatische Unit Test ging (Daher Test Klasse). Und nur als kleiner Hinweis: Der move Aufruf ist nicht statisch, d.h. es wird eine Instanz benötigt. Und der Typ wird beim Aufruf nicht mit angegeben. Also da wäre dann sowas wie das notwendig:
Java:
public static void main(String args[]){
  int meineZahl = xyz;
  MyClass instance = new MyClass();
  instance.move(meineZahl); // Also auf einer Instanz aufrufen und das int musste weg.
}

Aber mach Dir nichts draus - das sind typische Dinge, die schnell mal schief gehen, wenn man Code in dem Forum-Editor schreibt. Und top, dass Du dir nun auch andere Fragen anschaust - so lernt man auch einiges und Du wirst dem Einen oder Anderen bestimmt auch helfen können also bleib bitte dabei und lass Dich nicht abschrecken oder so!
Danke :) Wieder was neues dazu gelernt :)
 
K

kneitzel

Gast
Reicht Dir das? Ich meine, dass ich mal freie eBooks gesehen habe zu diesem Thema. Aber die wären auf Englisch. Wenn Du Fragen oder Probleme hast, dann melde Dich. Wir können ansonsten auch gerne mal paar Tests gemeinsam schreiben und daran dann das Eine oder Andere etwas erläutern... Das wäre mein Vorschlag an Dich. Bin eh gerade am überlegen, ob ich nicht den einen oder anderen Text mal etwas ausführlicher schreiben sollte um das dann auch auf meinem Blog zu veröffentlichen.....
 

Kirby.exe

Top Contributor
Reicht Dir das? Ich meine, dass ich mal freie eBooks gesehen habe zu diesem Thema. Aber die wären auf Englisch. Wenn Du Fragen oder Probleme hast, dann melde Dich. Wir können ansonsten auch gerne mal paar Tests gemeinsam schreiben und daran dann das Eine oder Andere etwas erläutern... Das wäre mein Vorschlag an Dich. Bin eh gerade am überlegen, ob ich nicht den einen oder anderen Text mal etwas ausführlicher schreiben sollte um das dann auch auf meinem Blog zu veröffentlichen.....
Also ich spreche fließend Englisch xD Also wenn du ebooks hast dann gerne her damit :) Naja also wo ich einfach noch Probleme habe ist zu verstehen wie in Java Objekte zwischen Klassen hin und her gereicht werden etc. Also generell wie eigentlich grundlegend Objektorienterte Programmierung funktioniert und zu lernen wie man objektorientiert denkt. :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C GUI Programmierung unter Windows mit Java womit? Java Basics - Anfänger-Themen 11
D Erste Schritte Womit anfangen, Java 6 oder 7 ? Java Basics - Anfänger-Themen 18
-horn- String im String suchen, womit? Java Basics - Anfänger-Themen 2
E Womit soll ich anfangen? Java Basics - Anfänger-Themen 5
N Womit mache ich ein menue Java Basics - Anfänger-Themen 2
P Wie kann diese Schleife beenden Java Basics - Anfänger-Themen 1
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
M Wie kommen diese Ausgaben zustande? Java Basics - Anfänger-Themen 12
W Warum diese Fehlermeldung? Java Basics - Anfänger-Themen 12
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
Alen123 Wie würdet ihr diese Aufgabenstellung lösen? Java Basics - Anfänger-Themen 18
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
Fats Waller Wofür stehen diese Konstanten im Java Labyrinth ? Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Wie schreibe ich diese ZEile um? Java Basics - Anfänger-Themen 1
M Objekt mit eindeutiger ID löschen, das nächste Objekt hat dann diese ID Java Basics - Anfänger-Themen 5
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
T Was macht diese Zeile? Java Basics - Anfänger-Themen 9
G Woher kommt diese Eigenschaft Java Basics - Anfänger-Themen 5
O Was tut diese Methode? und wie müssen die assertions aussehen? Java Basics - Anfänger-Themen 21
F Wie implementiere ich diese Aufgabenstellung? Java Basics - Anfänger-Themen 16
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
F Warum erhalte ich diese Fehler bei der Einbindung von SQLite JDBC in Eclipse? Java Basics - Anfänger-Themen 1
F Warum verläuft DIESE Schleife endlos? Java Basics - Anfänger-Themen 4
D Was bedeutet diese Schreibweise? Java Basics - Anfänger-Themen 9
A Erste Schritte Bitte helfen sie mir diese Programm zu schreiben Java Basics - Anfänger-Themen 12
W Wie vermerke ich diese Struktogramm Passage in Java Syntax? Java Basics - Anfänger-Themen 8
N Methoden warum wird diese Methode aufgerufen Java Basics - Anfänger-Themen 9
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
L Datentypen Date API - diese Woche bestimmen Java Basics - Anfänger-Themen 1
M Aus Datei auslesen und untersuchen ob diese Zeile schon vorhanden ist Java Basics - Anfänger-Themen 3
B Kann mir jemand diese Bedingung erklären Java Basics - Anfänger-Themen 5
B Wie könnte man mit Java diese Matheaufgabe lösen Java Basics - Anfänger-Themen 7
B Wie würdet ihr diese Methode erklären? Java Basics - Anfänger-Themen 2
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
kilopack15 Ist diese setter-Methode richtig? Java Basics - Anfänger-Themen 2
B Wie funktionieren diese Methoden in diesem Sortierverfahren genau? Java Basics - Anfänger-Themen 2
B Was macht diese Methode? Java Basics - Anfänger-Themen 9
P Was macht diese methode Java Basics - Anfänger-Themen 2
P Terminieren diese Schleifen Java Basics - Anfänger-Themen 6
U Ist diese Methode zur Matrix Vektor Multiplikation korrekt ? Java Basics - Anfänger-Themen 5
T Zeilen des ListArray nach einem Wort durchsuchen und diese Zeile ausgeben Java Basics - Anfänger-Themen 4
K Methoden mit den Namen accept. Welche Funktion haben diese? Java Basics - Anfänger-Themen 2
X wie kann ich in bluej/java einene 2d array mit zahlen fuellen, so dass sich diese in der der zeilen Java Basics - Anfänger-Themen 2
G Vertsändnisfrage zu Code - Wie kommt diese Ausgabe zustande? Java Basics - Anfänger-Themen 2
J Kann mir bitte mal jemand diese Codes erklären? Java Basics - Anfänger-Themen 19
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
X Wann schreibt man diese Syntax zeichen { } Java Basics - Anfänger-Themen 8
A Wieso kann ich nicht auf diese Variable zugreifen? Java Basics - Anfänger-Themen 6
A Erste Schritte Wieso funktioniert diese Klasse nicht Java Basics - Anfänger-Themen 11
H Wie erstelle ich diese Klassen? Java Basics - Anfänger-Themen 44
R Kann jemand diese Java Programmierung machen? Versteh ich leider nicht Java Basics - Anfänger-Themen 17
M Erste Schritte Wie kommt man auf diese Ausgabe? Java Basics - Anfänger-Themen 3
S Methoden Return Anweisung beendet Methode nicht, stattdessen wird diese zweimal durchlaufen Java Basics - Anfänger-Themen 3
SexyPenny90 Wieso ist diese eigene Equals-Methode schlecht? Java Basics - Anfänger-Themen 17
F verstehe diese Variable nicht... Java Basics - Anfänger-Themen 4
B for-schleife - Was tut diese? Java Basics - Anfänger-Themen 11
A Wie kommt diese NullPointerException zustande? Java Basics - Anfänger-Themen 13
D Warum ist diese Interfacedeklaration falsch? Java Basics - Anfänger-Themen 5
T Warum brauche ich diese IOException? Java Basics - Anfänger-Themen 30
R Welche Datenstruktor für diese Liste? Java Basics - Anfänger-Themen 6
B Erste Schritte Welche Kenntnisse brauche ich für diese Programmidee? Java Basics - Anfänger-Themen 4
L Immer diese Arrays Java Basics - Anfänger-Themen 11
H Was macht diese Methode? Java Basics - Anfänger-Themen 3
A was berechnet diese programm? Java Basics - Anfänger-Themen 13
G Was bedeutet diese Zeile? Java Basics - Anfänger-Themen 2
J Warum muss diese Methode static sein ?! Java Basics - Anfänger-Themen 7
H Warum funktioniert diese kleine Methode nicht? Java Basics - Anfänger-Themen 8
P ich versteh diese Methode nicht ;? Java Basics - Anfänger-Themen 7
P Datentypen Warum findet er diese methoden nicht? Java Basics - Anfänger-Themen 13
N We behandele ich diese Exception? Java Basics - Anfänger-Themen 17
O Ist diese Zahl größer oder kleiner 0? Java Basics - Anfänger-Themen 6
M Ist diese Aufgabe zu umständlich gelöst? Java Basics - Anfänger-Themen 9
M Gibt es eine einfachere Variante diese Aufgabenstellung zu lösen? Java Basics - Anfänger-Themen 11
hdi Brainlag: Warum fliegt diese NPE? Java Basics - Anfänger-Themen 10
J Woher kommt diese NullPointerException? Java Basics - Anfänger-Themen 6
N Verstehe diese Aufgabe nicht! Java Basics - Anfänger-Themen 16
D Wie wird diese Verzweigung genannt? Java Basics - Anfänger-Themen 6
H Klassen zur Anzeige ines Bildes und zum Zeichnen innerhalb diese Bildes Java Basics - Anfänger-Themen 2
N Wer kann diese Zeile erklären? Java Basics - Anfänger-Themen 9
T Warum muss diese Variable final deklariert werden? Java Basics - Anfänger-Themen 5
W Bindung bzw warum wird diese Methode aufgerufen? Java Basics - Anfänger-Themen 5
P [Positiv Erledigt] Ordner mit Bildern auslesen und diese speichern Java Basics - Anfänger-Themen 7
I Was macht diese Funktion? Java Basics - Anfänger-Themen 4
K Warum funktioniert diese Methode nicht? Java Basics - Anfänger-Themen 20
S Ich verstehe diese Methode nicht! Java Basics - Anfänger-Themen 6
G while (true) ? wodurch wird diese Schleife beendet? Java Basics - Anfänger-Themen 6
G Threads prüfen, ob diese noch laufen. Java Basics - Anfänger-Themen 3
G Class Getopts <-- Wie kann ich diese Class importieren Java Basics - Anfänger-Themen 1
G was bedeuted diese sachen wie <E> und so? Java Basics - Anfänger-Themen 2
S Warum bekomme ich diese Exception ? Java Basics - Anfänger-Themen 3
C Wie kann ich diese Methode aufrufen? Java Basics - Anfänger-Themen 2
M Warum wird diese Methode ausgeführt? Java Basics - Anfänger-Themen 2
M wie kann man diese Funktion besser machen ? Java Basics - Anfänger-Themen 3
S Nach Namen sortieren und diese in 3 Gruppen aufteilen Java Basics - Anfänger-Themen 16
ven000m Primzahl.class wie starte ich diese einzelne Datei? Java Basics - Anfänger-Themen 10
B wo finde ich diese Dateien? Java Basics - Anfänger-Themen 6
R Was bedeutet diese Zeile. Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben