Inventory contains double Entries!

MSM
Gast

Inventory contains double Entries!

Beitrag von MSM »

Hey Leute,

zur Zeit schlagen ca. 15 meiner Controller-Tests fehl mit der Begründung "Inventory contains double Entries!" (IllegalArgumentException)
Diese wird in der Klasse AbstractTest geworfen bei der Konvertierung des GuiInventoryEntry- Arrays zu einer Map. Allerdings habe ich durch SystemOutPrint getestet, dass es nicht zwei gleiche Inventareinträge gibt.
Merkwürdig ist, dass eigentlich der exakt gleiche Test (zum Beispiel bei den Shoptests) wie buyPickTest() funktioniert, im Gegensatz zu dem buyDrillTest().

Die Tutoren konnten mir in den Poolraumbetreuungszeiten auch nicht weiterhelfen.

Gruß

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Inventory contains double Entries!

Beitrag von SophiaLi1 »

Das Thema gab es im Forum schonmal und wurde da auch gelöst, einfach mal suchen.

K.M
Gast

Re: Inventory contains double Entries!

Beitrag von K.M »

Falls du den Eintrag nicht findest. Hier nochmal die Erklärung. (hab mich selbst Stunden lang damit rum geschlagen...)

Bei mir war das Problem ich hab das Inventar mit einem Array gelöst und jedem Array Eintrag genau einem Item zugeordnet.
Die Tests schmeißen dein Array allerdings in eine Hashmap (Eine Mathematische Menge ohne erstes und letztes Element) und dann wieder zurück in dein Array. Logischerweise wird so die Reihenfolge deines Arrays durcheinander geschmissen.
Und wenn du jetzt zum Beispiel beim kauf einen Eintrag überschreibst, überschreibst du vermutlich einen falschen Namen. Somit gibt es das überschriebene Item nicht mehr, dafür das neu hinzugefügte zwei mal.
Das es manchmal funktioniert und manchmal nicht liegt vermutlich daran, dass zufällig beim ins Array schmeißen der selber Eintrag getroffen wird wie er vorher war.

Das heißt auch wenn dein Programm funktioniert, funktionieren die Tests nicht, weil die Tests eine andere Programmierweise erwarten.

Die Lösung immer wenn du ein Gegenstand ändern willst, also Beispiel weise die Anzahl, schreibst du eine For-Schleife drumrum und darin eine If-Anweisung die abfragt ob im Inventar an der Stelle i der Key equals dem Namen.

Ich hoffe das war verständlich xD

mfg Kai

PS: Ich hoffe für die nächsten Jahre versuchen die Tutoren die Tests so zu schreiben, dass mehr Programmmierweisen unterstützt werden...

MSM
Gast

Re: Inventory contains double Entries!

Beitrag von MSM »

Thanks Kai,

für alle, die es weiter interessiert: Der Thread ist hier: /viewtopic.php?f=261&t=29500

Schade, dass die Tests einem mehr Nerven abverlangen als das Schreiben des funktionstüchtigen Programms.

MSM
Gast

Re: Inventory contains double Entries!

Beitrag von MSM »

Ach und es funktioniert, wenn ich einfach ein leeres Array zurückgebe :D

SInn hoch eintausend!

Benutzeravatar
SophiaLi1
Kernelcompilierer
Kernelcompilierer
Beiträge: 542
Registriert: 5. Jan 2014 11:48

Re: Inventory contains double Entries!

Beitrag von SophiaLi1 »

Wurde schon einmal erwähnt: Jedem Item in einem Array einen festen Platz zuzuweisen ist grottenschlechtes Programmieren und deswegen ist es auch gut, dass die Test das nicht durchlassen. Überlegt doch mal: Was wäre wenn ihr 100 Items hättet? Hätte jedes Item einen festen Platz und man orientiert sich an dem hätte man 300 Zeilen Quellcode nur zum Hinzufügen eines Items (das gleiche nochmal beim Löschen), benutzt man das Array auch als Array und so wie es gewollt ist, dann hat man egal bei welcher Arraylänge 4 Zeilen Quellcode.

Antworten

Zurück zu „Archiv“