IControllerMovementTest

Gast
Gast

IControllerMovementTest

Beitrag von Gast »

Hallo,

Ich habe eine Frage zu dem IControllerMovementTest:

Dort wird bei den moveOnMineral u.ä. Tests erwartet, dass das Feld nach dem Betreten nicht mehr sichtbar ist. Dies erschließt sich mir jedoch nicht ganz, da doch ein Feld das man betritt sichtbar werden soll, oder? Vielleicht habe ich auch den Test falsch verstanden...

Der Test gibt aus:

"The state after executing: 39 in state: main.Model@28... should be: main.Model@4d...
The visibility of (1 | 0) is incorrect! expected:<false> but was:<true>"

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

Re: IControllerMovementTest

Beitrag von SophiaLi1 »

Kannst du bitte kurz den Code vom Test posten? (bin am Handy) Dann kann ich kurz schauen, ob meine Vermutung stimmt und dir vielleicht helfen. (:

Gast
Gast

Re: IControllerMovementTest

Beitrag von Gast »

Fürs Handy vielleicht ein bißchen lang - vielen Dank für die angebotene Hilfe, hier ist der Code des Tests ...

Code: Alles auswählen

/**
	 * In diesem Test wird das abbauen von Mineralien auf Schmutz getestet. Dazu wird zunächst jedes Feld auf
	 * Schmutz gesetzt (ausnahme ist die SPilerposition). Anschließend wird auf dem Feld rechts neben dem Spieler
	 * 1 Silber und auf den folgenden Feldern 1 Gold, 1 Platin und 1 Diamant gesetzt. Anschließend wird 4 mal nach recht gegangen.
	 * Kosten Abbau Schmutz: 30 (ohne Schaufel)
	 * Kosten Abbau Silber: 25
	 * Kosten Abbau Gold: 35
	 * Kosten Abbau Platin: 60
	 * Kosten Abbau Diamant: 25
	 * @throws Exception
	 */
	@Test
	public void moveOnMineralTest() throws Exception{
		resetFields(1000, model, null, Constants.TYPE_DIRT, new Position(x0+0, y0+0), false, false);
		model.setTypeOfField(new Position(x0+0, y0+0), Constants.TYPE_EMPTY);
		model.placeItemOnField(new Position(x0+1, y0+0), Constants.MINERAL_SILVER);
		model.placeItemOnField(new Position(x0+2, y0+0), Constants.MINERAL_GOLD);
		model.placeItemOnField(new Position(x0+3, y0+0), Constants.MINERAL_PLATINUM);
		model.placeItemOnField(new Position(x0+4, y0+0), Constants.MINERAL_DIAMOND);

		IModel state1 = copyModel(model);
		state1.removeItemFromField(new Position(x0+1, y0+0), Constants.MINERAL_SILVER);
		
		Map<String, Integer> inventory = inventoryToMap(state1.getInventoryOfPlayer());
		inventory.put(Constants.MINERAL_SILVER, 1);
		state1.setInventoryOfPlayer(mapToInventory(inventory));

		state1.setVisibilityOfField(new Position(x0+1, y0+0), true);
		state1.setPositionOfPlayer(new Position(x0+1, y0+0));
		state1.setTypeOfField(new Position(x0+1, y0+0), Constants.TYPE_EMPTY);
		state1.setMoneyOfPlayer(state1.getMoneyOfPlayer()-30-25);
		
		
		IModel state2 = copyModel(state1);
		state2.removeItemFromField(new Position(x0+2, y0+0), Constants.MINERAL_GOLD);
		
		inventory = inventoryToMap(state2.getInventoryOfPlayer());
		inventory.put(Constants.MINERAL_GOLD, 1);
		state2.setInventoryOfPlayer(mapToInventory(inventory));

		state2.setVisibilityOfField(new Position(x0+2, y0+0), true);
		state2.setPositionOfPlayer(new Position(x0+2, y0+0));
		state2.setTypeOfField(new Position(x0+2, y0+0), Constants.TYPE_EMPTY);
		state2.setMoneyOfPlayer(state2.getMoneyOfPlayer()-30-35);
		
		IModel state3 = copyModel(state2);
		state3.removeItemFromField(new Position(x0+3, y0+0), Constants.MINERAL_PLATINUM);
		
		inventory = inventoryToMap(state3.getInventoryOfPlayer());
		inventory.put(Constants.MINERAL_PLATINUM, 1);
		state3.setInventoryOfPlayer(mapToInventory(inventory));
		
		state3.setVisibilityOfField(new Position(x0+3, y0+0), true);
		state3.setPositionOfPlayer(new Position(x0+3, y0+0));
		state3.setTypeOfField(new Position(x0+3, y0+0), Constants.TYPE_EMPTY);
		state3.setMoneyOfPlayer(state3.getMoneyOfPlayer()-30-60);
		
		IModel state4 = copyModel(state3);
		state4.removeItemFromField(new Position(x0+4, y0+0), Constants.MINERAL_DIAMOND);
		
		inventory = inventoryToMap(state4.getInventoryOfPlayer());
		inventory.put(Constants.MINERAL_DIAMOND, 1);
		state4.setInventoryOfPlayer(mapToInventory(inventory));
		
		state4.setVisibilityOfField(new Position(x0+4, y0+0), true);
		state4.setPositionOfPlayer(new Position(x0+4, y0+0));
		state4.setTypeOfField(new Position(x0+4, y0+0), Constants.TYPE_EMPTY);
		state4.setMoneyOfPlayer(state4.getMoneyOfPlayer()-30-25);
		
		IModel[] states = {state1, state2, state3, state4};
		int[] keystrokes = {IController.KEY_CURSOR_RIGHT, IController.KEY_CURSOR_RIGHT, IController.KEY_CURSOR_RIGHT, IController.KEY_CURSOR_RIGHT};
		
		runTestCaseChain(model, states, keystrokes, false);
		
		
	}

Chuechco
Mausschubser
Mausschubser
Beiträge: 62
Registriert: 4. Jan 2014 13:44

Re: IControllerMovementTest

Beitrag von Chuechco »

geh ma mit dem Debugger durch und schau in welcher Zeile der Fehler auftritt.

Gast
Gast

Re: IControllerMovementTest

Beitrag von Gast »

Ich habe das Problem jetzt gefunden und gefixed - trotzdem vielen Dank ...

Gast
Gast

Re: IControllerMovementTest

Beitrag von Gast »

Kannst du mir sagen woran das lag? Der Fehler tritt bei mir auch auf :?

Stammgast
Gast

Re: IControllerMovementTest

Beitrag von Stammgast »

Hallo,

ich bin mit der Implementation jetzt soweit fertig, das Spiel funktioniert und wurde von meinen kleinen Cousins auch schon sehr ausgiebig getestet :mrgreen:.
Es besteht auch alle Tests, aber bei den moveOn-Tests (z.B. "moveOnSandstoneFieldTest") hängt sich BlueJ offenbar auf, ich kann den Test so lange laufen lassen wie ich will, er bringt kein Ergebnis, auch keine Fehlermeldung.

Der Test "moveOnMineral" funktioniert komischerweise, und ist auch erfolgreich.

Was genau machen diese Tests, und in welche Richtung kann ich suchen, wenn sich die VM (oder was auch immer) aufhängt?

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

Re: IControllerMovementTest

Beitrag von SophiaLi1 »

Also bei mir dauert der MoveOnSandstone-Test am längsten von allen, kann es einfach sein, dass dein Pc dadurch zu sehr ausgelastet wird?

steffen12
Sonntagsinformatiker
Sonntagsinformatiker
Beiträge: 205
Registriert: 14. Okt 2009 16:28

Re: IControllerMovementTest

Beitrag von steffen12 »

Hi.

Was die Tests genau machen ist ein wenig länglich um es hier zu beschrieben.
Das Problem ist echt schwierig. Um zu testen, ob die Tests im Dauerlauf sind, oder ob sich tatsächlich was aufhängt kannst du zunächst mal die Test -Annotationen bei den fraglichen Testmethoden durch folgende ersetzen: @Test(timeout = 10000) dann werden die Tests nach 10 Sekunden abgebrochen.
Wenn das passiert wissen wir schon mal, dass sich nicht die VM aufhängt.
Es kann tatsächlich sein, dass diese Tests sehr lange dauern.
Wir versuchen derweil näheres herauszufinden.

VG

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

Re: IControllerMovementTest

Beitrag von SophiaLi1 »

Ich poste gleich mal einen Screenshot, wie lange es bei mir dauert (und das ist weit mehr als 10000 ms), der Test läuft gerade noch.

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

Re: IControllerMovementTest

Beitrag von SophiaLi1 »

test.jpg
test.jpg (78.78 KiB) 1223 mal betrachtet
Ich bin jetzt am PC, kann mich aber erinnern, dass der MoveOnSandstoneTest am Laptop auch schon fast 80000ms gedauert hat.

Stammgast
Gast

Re: IControllerMovementTest

Beitrag von Stammgast »

Vielleicht sollte ich meine High-End-Technik (Dell Latitude, 2007er Jahrgang) nicht so überfordern. Zum Vergleich: der moveOnMineralTest, der bei dir 8 Sekunden dauert, dauert bei mir 196 Sekunden :mrgreen:.

Ich habe das Framework jetzt auf einem USB-Stick, dann sehe ich dass der Test noch läuft, solange der Stick blinkt. Es hängt sich also nicht auf. Nach nur 719453 ms kam jetzt ein "OutOfMemoryError: java heap space". :roll:
Vielleicht sollte ich das Ganze nochmal auf einem halbwegs schnellen Computer probieren,

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

Re: IControllerMovementTest

Beitrag von SophiaLi1 »

Ja, das solltest du vielleicht :mrgreen: Die Tests sind anscheinend doch rechenaufwändiger als ich gedacht habe: Zum Vergleich: Mein PC ist von 2013 mit einem i7-Prozessor und 12 GB RAM, und da dauert es schon gefühlt ewig. :roll:

Antworten

Zurück zu „Archiv“