Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabe 8.4
Hallo, ich hätte da eine Frage zur Aufgabe 8.4.
Und zwar bin ich meiner Meinung nach schon fertig mit der Aufgabe.
Allerdings sollen wir das ganze ja mit der main-Methode der Runner.java Datei ausprobieren. Nun steht in der Aufgabe : “Ausführen können Sie die Tests mit der main Methode von Runner, die als Parameter die Test-
klasse erwartet.”
Das hab ich versucht umzusetzen mit dem JUnit-Plugin, was in der Vorlesung vorgestellt wurde.
Da ich jede meiner neu definierten Methoden mit einem @Test versehen habe, spuckt er mir beim ausführen trotzdem aus, dass ich keine Testklassen definiert habe.
Was könnte ich falsch gemacht haben ?
Hast du es mal probiert wie in der Aufgabe beschrieben über die Konsole zu starten?
Also alles zu kompilieren was benötigt wird und dann java Runner CalcATest oder CalcVTest zu nehmen. Denn die @Test komm soweit ich es weiß nicht von einem “echten” JUnit sondern von dem Test interface.
Ist mit der Konsole die Konsole in Eclipse oder “cmd” gemeint ?
Wenn ichs in Eclipse einfach ausführe kommt “missing class argument” → die stehen ja noch nicht in Verbindung in irgendeiner Weise.
Und wenn ich in cmd alles ausführen will, geht überhaupt nichts.
Nichtmal den javac Befehl nimmt er mir an.
In der Runner wird ja über (String[] args) gearbeitet. Wie kann man denn das ändern, damit er die Klassen als Parameter nimmt ? So ist es ja in der Aufgabenstellung beschrieben.
Irgendwo in Eclipse gibt es einen Dialog “Run configurations”. Dort gibt es einen Tab “Arguments”, wo man Programm-Argumente fuer den Start des Programms angeben kann.
Ich habe auch noch eine Frage zu calcV bzw. zu beiden:
Wenn ich das richtig verstanden habe, soll in einem Test ein Integer overflow erzeugt werden.
Verwendet man dann für “int should” den Wert, der ohne dem overflow herauskommen müsste?
Diese Zahl liegt ja dann außerhalb des Wertebereichs und das kommt dann zu einer Fehlermeldung.
Bei mir kommt da: The literal… of type int is out of range.
Aber prinzipiell müsste doch immer die should-Zahl bei einem overflow außerhalb des Wertebereichs liegen oder?
Der Overflow soll bei Zwischenergebnissen rauskommen, durch weitere Berechnungen in den jeweiligen Methoden soll das Endergebnis aber wieder im Integer-Bereich liegen.
(Integer.MAX_VALUE + 1)/4
könnte vom korrekten Wert her in einem int gespeichert werden, das Ergebnis ist aber auf Grund des zwischenzeitlichen Überlaufs fehlerhaft.
Danke!
ich blicke nicht ganz durch was die runner.klasse genau testet. deshalb meine frage: was soll denn rauskommen wenn man korrekte tests geschrieben hat ?
Ich habe auch ein kleines Problem mit den Tests. Wenn ich die Runner Klasse mit folgenden Parametern “Runner CalcVTest Runner CalcATest” bei Eclipse ausführe erscheint bei mir dieser Text “0/0 tests executed sucefully” in der Konsole.
Anscheinend werden meine Tests nicht als solche erkannt. “@Test” habe ich bei jeder meiner Testmethoden über dem Methodenkopf. Eingabeaufforderung habe ich auch schon probiert, half jetzt aber auch nicht weiter…
Weiß jemand, woran das liegen könnte?
Also ich hab als parameter jeweils nur “calcvtest” oder “calcatest” übergeben.
java Runner CalcATest
Test with method ??? failed
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at Runner.main(Runner.java:33)
Caused by: java.lang.AssertionError: value is ??? but should be ???:
at Assert.assertEquals(Assert.java:4)
at CalcATest.test(CalcATest.java:??)
at CalcATest.???(CalcATest.java:?)
... 5 more
Test with method ??? failed
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at Runner.main(Runner.java:33)
Caused by: java.lang.AssertionError: value is ??? but should be ???:
at Assert.assertEquals(Assert.java:4)
at CalcATest.test(CalcATest.java:??)
at CalcATest.???(CalcATest.java:?)
... 5 more
0/2 tests executed sucefully
wobei die ??? euren Methodennamen, Parametern bzw. Zeilennummern entsprechen.
Analog für java Runner CalcVTest.
Für die Ecplise-User: Der Parameter für Runner ist nur CalcATest bzw. CalcVTest.
java Runner CalcATest
entspricht dem kompletten Konsolenaufruf. Das java Runner macht Eclipse euch durch drücken auf den Run-Button.
Danke dann stimmts bei mir
Danke joeb96 und Whitespace! Der Fehler lag genau bei den Argumenten.
Wir koennen beliebige Werte bei “should” eingeben, und bei der Ausgabe kommt das gleiche raus. Wir wird dann geprueft ob wir das richtige berechnet haben?
Ja.
Fußnote zu 8.4
Auf der Übungsseite wurde zu CalcVTest und CalcATest eine Fußnote gemacht:
Ist damit die schon vorgegebene Methode gemeint, oder die @ Markierung ?
Weil man selber kann ja keine zwei gleichen void Methoden mit dem selben Namen erstellen …
ja die vorgegebenen methoden heißen jetzt test.
Wenn x und y die Methodennamen sind und
Test with method x OK
Test with method y OK
2/2 tests executed sucefully
rauskommt dann stimmen unsere Testfälle, oder?
Und soll bei should der Wert angegeben werden den der Computer durch seine Integer-Ungenauigkeit berechnet oder was als in rauskommt wenn man als mit den genauen Ergebnissen rechnet?