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.
Testcases 6.3 Warenhaus
Ein paar Testcases für die Aufgabe 6.3: https://wwwcip.informatik.uni-erlangen.de/~xu76puwe/aud-testcases/PackageWarehouseTest.java
Falls ein Testcase fehlschlagen sollte, kann es gut sein, dass der Testcase fehlerhaft ist und nicht der getestete Code. In diesem Fall werde ich die Testcases natürlich versuchen zu korrigieren.
Danke sehr
hatte nur die oberen Arraygrenzen ueberprueft…
Eins ist nicht ganz klar: Soll in unSet(…) die Position des Packages veraendert werden, oder nicht? In der Aufgabenstellung steht hier mal wieder nichts explizites, wohingegen bei set(…) angegeben ist, dass, die Koordinaten nicht veraendert werden sollen. Ich koennte mir vorstellen, dass das auch fuer die unSet(…) Methode gilt.
Falls jemand was dazu sagen koennte, waere das hilfreich.
Ich bezweifle, dass das ein Troll sein sollte
Für Testcases find ich einen Extra Thread nicht verkehrt…
Das ist meiner Meinung nach eine sehr berechtigte Frage! In den Testcases wird das irgendwie so vorausgesetzt. In der Aufgabenstellung steht allerdings nichts.
Wenn ich mich den Testcases anpasse laufen diese durch
Das ist auch ein Testcase, bei dem ich mir unsicher bin, ob er richtig ist oder nicht. Ich glaube inzwischen eher, dass die Position des Paketes durch Warehouse.unSet nicht verändert werden soll. Dagegen spricht, dass für die Methode Warehouse.set extra erwähnt wird, dass die Koordinaten des Paketes nicht verändert werden sollen, für die Methode Warehouse.unSet hingegen nicht:
Hallo,
ich habe die Testcases bei mir ausgeführt und bekomme bei folgendem Aufruf einen Error:
Exception in thread “main” java.lang.AssertionError: testSettingPackage: Expected x to be -1 but was 3
checkCoordinates(p, -1, -1, “testSettingPackage”);
Weiß vielleicht jemand, um welche Methode es sich in Warehouse/Package handelt? Oder hat andere allgemeine Hinweise hierfür?
Ohne diesen Aufruf laufen die Testfälle einwandfrei durch.
Vielen Dank für eure Hilfe!
P.S.: Nochmal herzlichen Dank für die Testfälle!
Es handelt sich hierbei um folgenden Testcase:
Warehouse w = new Warehouse(10, 10);
Package p = new Package(w, 3, 4);
w.set(3, 4, p);
checkCoordinates(p, -1, -1, "testSettingPackage");
checkCoordinates prüft, ob das Packet p die Koordinaten (-1|-1) hat. Der Aufruf w.set(3, 4, p) soll die Koordinaten des Pakets p nicht verändern. Deine Implementierung verändert die Koordinaten des Pakets allerdings, deswegen schlägt der Testfall fehl.
Ich hab genau das selbe Problem wie imp, ich bekomme auch den Error testSettingPackage: Expected x to be -1 but was 3, obwohl meine set()-Methode die Koordinaten des Pakets p nicht verändert, da mein check(), welches ich in der set()-Methode aufrufe ein false liefert. Und damit wird die set()-Methode überhaupt nicht ausgeführt, also werden die Koordinaten auch nicht verändert bzw. erneut geschrieben.
Also meiner Meinung nach, hast du da einen kleinen Fehler gemacht. Denn mit testSettingPackage() machst du den Test ob die set()-Methode die Koordinaten nochmal schreibt, indem du das Paket einfach nochmal auf die selben Koordinaten platzierst. Dann rufst du checkCoordinates(p, -1, -1, “testSettingPackage”); auf. Diese Methode überprüft dann, ob p.getX() und p.getY() -1 zurück liefern und hier liegt meiner Meinung nach der Fehler, weil dieses getX() und getY() sollen nur dann -1 zurück liefern, wenn das Paket noch nicht platziert wurde. Da das Paket aber schon platziert wurde, ist es ganz natürlich das getX() und getY() die x- und y-Koordinaten zurückliefern.
Also ich muss ehrlich sagen, dass ich mit den Testcases hier nicht klar komme^^
Haken ist da, eigene Tests, auch gemeinere als die öffentlichen laufen alle logisch durch, aber beim Anwerfen der PackageWarehouseTest.java bekomme ich lauter Out of Bounds…
Exeption in thread “main” Java.lang.ArrayIndexOutOfBoundsExeption: 100
at Warehouse.getWarehouse.java:28
at PackageWarehouseTest.checkGetPackagePackageWarehouseTest.java:13
at PackageWarehouseTest.testGettingPackageOutSideOfWarehouse<PackageWarehouseTest.java: 144>
at PackageWarehouseTest.mainPackageWarehouseTest.java:192
das bekomme ich.
Obwohl ich eigentlich immer und überall darauf achte, dass im Array nichts größer 99 steht, nichts kleiner null, nichts gleich oder Array.length, also echt keine Ahnung… so ganz durchschauen was fehlgeschlagen ist, tue ich leider auch nicht, würde mich also freuen, wenn mir einer vll erklären könnte woran es nun liegt, also wo ich nachschauen könnte… ^^
Wäre super
Naja anscheinend werden in der get()-Methode der Klasse Warehouse (Zeile 28) die Array-grenzen ueberschritten. Schau doch mal nach, ob du wirklich ueberpruefst, dass beide Koordinaten innerhalb der Grenzen sind.
Super an die get Methode hab ich da gar nicht gedacht, weil ich dachte, sie wird eh nur mit richtigen Werten ja von mir selber aufgerufen, aber gut, danke für die Hilfe :)!
Noch eine Logikfrage hätte ich, finde das wurde ein wenig offen gelassen bei der Aufgabenstellung.
Wenn ich ein Objekt platziere, dass zuvor schon platziert wurde:
mein Vorgehen: Objekt rausnehmen (könnte sich ja selbst im weg sein dann), dann Check, und jetzt zum Problem: wenn der Check false zurück gibt, also es an die neue Position nicht platziert werden kann, baut ihr das Packages dann wieder ein an die alte Stelle und gebt false aus, oder lasst ihr es draußen und gebt false zurück?
Also was ich dazu sagen würde (kein gewähr auf Richtigkeit):
Du kannst deine check so bauen, dass du sie als erstes aufrufst und dann erst das Objekt rausnimmst und es wieder einfügst…
also ich glaube dass das funktioniert
Naja macht ja keine Unterschied, wenn ich dich denn richtig verstanden habe…
Es geht darum, auch wenn man es so macht, wie du es beschrieben hast, stell dir vor an der neuen Position wo es neu platziert werden soll, da liegt schon was anderes, also neue Position geht nicht, soll das Package dann draußen bleiben, oder wieder an die alte Stelle gelegt werden.
Bei dir wird gecheckt, wie bei mir ja auch, ob neuer Platz auch wirklich frei ist. True, alles gut, aber bei false lassen wir beide das Paket zurzeit noch an der alten Position stehen, aber ist das richtig? Soll es nicht rausgenommen werden?
Also ich glaube wir haben unseren Fehler gefunden. Zumindest funktionieren jetzt alle Testfälle. Vielen Dank für die hilfreichen Beiträge