Skip to content

Commit

Permalink
Test 8,9,10 completed with documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
bohcstams committed May 18, 2024
1 parent fc65797 commit aabbe0a
Show file tree
Hide file tree
Showing 8 changed files with 154 additions and 21 deletions.
69 changes: 65 additions & 4 deletions doc/UI_tesztek.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,71 @@
A UI tesztelés célja, hogy a megírt felhasználói felületet ne kézzel kelljen tesztelnie a fejlesztőknek, hanem az automatizált teszteket lefuttatva gyorsan és hatékonyan lehessen teszteli az alkalmazásunk felhasználói felületét.

## UI tesztelési eszközök
A megadott feladatkiírásban feltüntetett 3 lehetőség (Selenium, Tosca, Appium) sajnos nem támogat Java Swing felhasználói felület tesztelést, viszont megpróbáltam AssertJ segtíségével letesztelni programunk felhasználói felületét.
A megadott feladatkiírásban feltüntetett 3 lehetőség (Selenium, Tosca, Appium) sajnos nem támogat Java Swing felhasználói felület tesztelést, viszont megpróbáltam AssertJ segtíségével letesztelni programunk felhasználói felületét. [AssertJ honlapja](http://joel-costigliola.github.io/assertj/assertj-swing.html)

## UI keretrendszer felállítása
Az AssertJ keretrendszert a pom.xml-be való függőség felvételével tudjuk elérni, majd pedig a JUnit tesztekhez hasonlóan írhatunk teszteket, amiben hivatkozhatjuk a felhasználói felület elemeit, rajtuk pedig műveleteket végezhetünk el(pl.: kattintás, érték beírása).
<p>
Az AssertJ keretrendszert a pom.xml-be való függőség felvételével tudjuk elérni, majd pedig a JUnit tesztekhez hasonlóan írhatunk teszteket, amiben hivatkozhatjuk a felhasználói felület elemeit, rajtuk pedig műveleteket végezhetünk el(pl.: kattintás, érték beírása). Alapértelmezetten mindig egy olyan játékot indítottam, ahol két játékos játszott, egy szerelő és egy szabotőr.
</p>
<p>
Az AssertJ függőség a pom.xml-ben:

## Tesztek elkészítése
Elsőként a keretrendszer tesztjeként egy olyan tesztet írtam, amely szimplán létrehoz egy játékot 1-1 játékossal majd pedig az összes körön keresztül passzol, ez követően pedig bezárja a játékot. Ezzel a teszttel tudjuk megnézni, hogy az alap funkciók működnek-e a játék során.
![](test_images/ui_test_1.png)
</p>

## Teszt 1
Elsőként a keretrendszer tesztjeként egy olyan tesztet írtam, amely szimplán létrehoz egy játékot 1-1 játékossal majd pedig az összes körön keresztül passzol, ez követően pedig bezárja a játékot. Ezzel a teszttel tudjuk megnézni, hogy az alap funkciók működnek-e a játék során.

## Teszt 2
A második tesztben a szabotőr játékos rálép egy csőre és kilyukasztja azt. Az ott folyó víz kifolyik a csőből, ezzel a szabotőrök pontszámát növelve. Ezt követően mindenki passzol amíg a játék véget nem ér, így tehát a szabtőrnek kell nyernie, ezt is tesztelem a játék végén, majd pedig kilépés következik.
![](test_images/ui_test_2.png)

## Teszt 3
A teszt során szintén kilyukaszt a szabotőr egy csövet, viszont a szerelő ezt követően megjavítja azt. Ezt követően szintén mindenki passzol amíg a játék véget nem ér. Ebben a helyzetben a szerelőnek kell nyernie, ezt tesztelem a játék végén, majd pedig kilépek.
![](test_images/ui_test_3.png)

## Teszt 4
Ez a teszt nem játssza végig a játékot, csak a cső beragasztózásának működését teszteli. A szerelő játékos beragasztózza a csövet, amin éppen áll, ekkor pedig ellenőrzöm, hogy az a cső tényleg ragasztós lett-e.
![](test_images/ui_test_4.png)

## Teszt 5
Az előző teszthez hasonlóan a cső síkossá tehetőségét teszteli. A nomád játékos rálép egy csőre, majd pedig síkossá teszi azt, ekkor pedig ellenőrzöm, hogy a cső tulajdonságai ennek megfelelően módosultak-e.
![](test_images/ui_test_5.png)

## Teszt 6
<p>Ebben a tesztben azt ellenőrzöm, hogy működik-e egy új pumpa felvétele és annak lerakása. Elsőként a szerelő rálép a városra, felvesz egy pumpát, majd pedig továbbmegy egy csőre és ott leteszi. Ekkor ellenőrzöm, hogy a pumpa és a vele együtt létrejövő új cső hozzáadódik-e a játékhoz, és hogy ezek után a szerelő rá is tud-e lépni az új pumpára és csőre.</p>
<p>A teszt készítése során ennek köszönhetően találtam rá egy hibára a programban, hiszen eredetileg a pumpa lehelyezése után az csak a képernyőn jelent meg és a játékhoz sem az új cső sem pedig a pumpa nem adódott hozzá, ezért nem is volt látható a rajta átfolyó víz sem. Ezt a hibát javítottam és így már helyesen működik a program ezen része</p>
Kép a javítás előtt:

![](test_images/ui_test_7.png)

Kép a javítás után:
![](test_images/ui_test_6.png)

## Teszt 7
<p>
Ebben a tesztben azt ellenőrzöm, hogy működik-e egy új cső felvétele és annak bekötése egy új pumpába. Elsőként a szerelő rálép a városra, ott felvesz egy csövet. Majd pedig átmegy egy pumpára, és ott beköti. Ennek következtében az új csőnek is be kell kerülnie a játékba, víznek kell tudni folynia rajta keresztül. Ezek meglétét ellenőrzöm a teszt során.
</p>
<p>
Az előző esethez hasonlóan itt is találtam egy hibát a kódban, hiszen ebben az esetben sem történt meg az új cső hozzáadása a játékoz, így víz sem tudott rajta folyni.

![](test_images/ui_test_8.png)

## Teszt 8
<p>
Azt ellenőriztem le, hogy működik-e a pumpák átállítása. Ehhez ismételten le kellett helyeznem egy új csövet, mert a játék kezdő állásaában minden pumpára két cső van rákötve, így nem állíthatóak át. Az új cső az előző tesztben lévő helyre került, majd pedig ezután a szerelő átállítja, hogy a pumpa kimenete az újonnan lehelyezett cső legyen. Ezt ellenőrzöm is a teszt során, hogy teljesült-e.
</p>
<p>
Ez a teszt is segített egy meglévő hiba megtalálásában és kijavításában, hiszen a kódban a "Change Pump" gomb eseménykezelője rossz if-else ágban volt, ezért bal egérgomb kattintásra le sem futott. A hibát javítva már helyesen műkdött a gomb és a funkciója is.
</p>

![](test_images/ui_test_9.png)

## Teszt 9
A tesztben az ellenőriztem le, hogy az új cső letétele után arra a csőre egy új pumpát is le tud-e helyezni a szerelő. Az új csővel a szerelő a bal alsó pumpát és a várost köti össze, majd errő a csőre teszi le a pumpát. Ezek után pedig ellenőriztem, hogy a megfelelő végpontok beállítódtak-e az új elemeknél.
![](test_images/ui_test_10.png)

## Teszt 10
Ez egy összetett teszt, ami összesítve teszteli a pumpák és csövek felvételének és lerakásának működését, és egy pumpa átállításáat. A szerelő az előző teszthez hasonlóan felvesz egy csövet és egy pumpát is, majd pedig lehelyezi azokat az előző tesztnek megfelelően. Ezt követően pedig a bal alsó pumpát úgy állítja át, hogy a víz az új ágon folyjon. Ebben a konfigurációban a víznek ezen az úton is el kell tudnia jutni a városba, ezt ellenőrzöm a teszt során
![](test_images/ui_test_11.png)
Az egyetlen hiba, amit felfedeztem a teszt során, hogy a víz folyásának megfelelően az automatikusan létrejövő csőnek is kék színűnek kellene lennie, ez viszont a képen láthatóan nem történik meg. A teszt ellenőrzi, hogy van-e benne víz tehát csak a felhasználói felületen nem jelenik meg az információ.
Binary file added doc/test_images/ui_test_10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/test_images/ui_test_11.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added doc/test_images/ui_test_9.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 7 additions & 1 deletion src/main/java/hu/bomboclat/Game/Pump.java
Original file line number Diff line number Diff line change
Expand Up @@ -161,5 +161,11 @@ public void setView(IView pw) {
*/
public boolean isWorking() {return working;}


public Pipe getFrom(){
return from;
}

public Pipe getWhere(){
return where;
}
}
25 changes: 13 additions & 12 deletions src/main/java/hu/bomboclat/Graphics/Drawer.java
Original file line number Diff line number Diff line change
Expand Up @@ -137,18 +137,19 @@ public void mouseClicked(MouseEvent e) {
}

}
}
else if(wantsToChange != null && first_option) {
in = getClosestField(e.getX(), e.getY());
first_option=false;
}
else if(wantsToChange != null && !first_option) {
out = getClosestField(e.getX(), e.getY());
wantsToChange.ChangePump((Pipe)in, (Pipe)out);
wantsToChange=null;
first_option=true;
revalidate();
repaint();
else if(wantsToChange != null && first_option) {
in = getClosestField(e.getX(), e.getY());
first_option=false;
}
else if(wantsToChange != null && !first_option) {
out = getClosestField(e.getX(), e.getY());
wantsToChange.ChangePump((Pipe)in, (Pipe)out);
wantsToChange.setMoves(wantsToChange.getMoves() - 1);
wantsToChange=null;
first_option=true;
revalidate();
repaint();
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/hu/bomboclat/Graphics/GameFrame.java
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ private void initFrame() {
control.add(infoLabel, BorderLayout.NORTH);

this.changePump = new JButton("Change Pump");
this.changePump.setName("ChangePump");
this.changePump.setName("Change Pump");
this.changePump.setMaximumSize(new Dimension(175, 50));
this.changePump.setAlignmentX(Component.CENTER_ALIGNMENT);
this.changePump.setForeground(new Color(0,0,0));
Expand Down
71 changes: 68 additions & 3 deletions src/test/java/hu/bomboclat/GuiTest.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package hu.bomboclat;

import static org.assertj.swing.launcher.ApplicationLauncher.application;
import static org.assertj.swing.finder.WindowFinder.findFrame;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

import hu.bomboclat.Game.Pipe;
import hu.bomboclat.Game.Pump;
import hu.bomboclat.Graphics.GameFrame;
import org.assertj.swing.core.GenericTypeMatcher;
import org.assertj.swing.core.MouseButton;
Expand Down Expand Up @@ -35,10 +34,13 @@ public class GuiTest extends AssertJSwingJUnitTestCase {
private Point leftPump = new Point(100, 390);
private Point rightPump = new Point(555, 390);
private Point newlyPlacedPump = new Point(335, 280);
private Point newlyPlacedPumpOnNewPipe = new Point(60, 85);
private Point pipeFromCityToSource = new Point(260,135);
private Point pipeFromPumpToPump = new Point(285, 390);
private Point pipeFromCityToPump = new Point(400, 300);
private Point pipeFromSourceToPump = new Point(205, 315);
private Point newlyPlacedPipe = new Point(100, 260);
private Point newlyPlacedPipeAfterPumpPlaced = new Point(85, 260);

@Override
protected void onSetUp(){
Expand Down Expand Up @@ -92,6 +94,27 @@ protected void placePipeFromCityToLeftPump(){
pressButton("Place Pipe");
}

protected void placePipeAndPumpFromCityToLeftPump(){
pressButton("Move");
moveAndClickXY(City);
pressButton("Pick Up Pipe");
pressButton("Pick Up Pump");
pressButton("Move");
moveAndClickXY(pipeFromCityToSource);
pressButton("Move");
moveAndClickXY(Source);
pressButton("Pass");
pressButton("Pass");
pressButton("Move");
moveAndClickXY(pipeFromSourceToPump);
pressButton("Move");
moveAndClickXY(leftPump);
pressButton("Place Pipe");
pressButton("Move");
moveAndClickXY(newlyPlacedPipe);
pressButton("Place Pump");
}

@Test
public void PlayAGameWithTwoPlayersAndOnlyPressPassThenExit(){
startGameWithTwoPlayers();
Expand Down Expand Up @@ -172,6 +195,7 @@ public void TestForPlacePump(){
pressButton("Move");
moveAndClickXY(newlyPlacedPump);
assertEquals(frame.currentGame.getCurrPlayfield().getNodes().get(4), frame.currentGame.getCurrPlayer().getField());
pressPassButton(20);
}

@Test
Expand All @@ -190,7 +214,48 @@ public void TestForChangePump(){
startGameWithTwoPlayers();
placePipeFromCityToLeftPump();
pressButton("Change Pump");
moveAndClickXY(pipeFromPumpToPump);
moveAndClickXY(pipeFromSourceToPump);
pressButton("Change Pump");
moveAndClickXY(newlyPlacedPipe);
Pump modifiedPump = (Pump)frame.currentGame.getCurrPlayfield().getNodes().get(2);
assertEquals(frame.currentGame.getCurrPlayfield().getPipes().get(3), modifiedPump.getFrom());
assertEquals(frame.currentGame.getCurrPlayfield().getPipes().get(4), modifiedPump.getWhere());
pressPassButton(18);
}

@Test
public void TestForPickUpPipeAndPickUpPump(){
startGameWithTwoPlayers();
placePipeAndPumpFromCityToLeftPump();

Pipe newpipe = frame.currentGame.getCurrPlayfield().getPipes().get(4);
Pipe automaticallyCreatedPipe = frame.currentGame.getCurrPlayfield().getPipes().get(5);
Pump newPump = (Pump)frame.currentGame.getCurrPlayfield().getNodes().get(4);
assertEquals(newpipe, newPump.getFrom());
assertEquals(automaticallyCreatedPipe, newPump.getWhere());
assertEquals(5, frame.currentGame.getCurrPlayfield().getNodes().size());
assertEquals(6, frame.currentGame.getCurrPlayfield().getPipes().size());
}

@Test
public void TestForBothPickUpsAndChangePump(){
startGameWithTwoPlayers();
placePipeAndPumpFromCityToLeftPump();
pressButton("Pass");
pressButton("Pass");
pressButton("Move");
moveAndClickXY(newlyPlacedPumpOnNewPipe);
pressButton("Move");
moveAndClickXY(newlyPlacedPipeAfterPumpPlaced);
pressButton("Move");
moveAndClickXY(leftPump);
pressButton("Change Pump");
moveAndClickXY(pipeFromSourceToPump);
pressButton("Change Pump");
moveAndClickXY(newlyPlacedPipeAfterPumpPlaced);
pressPassButton(2);
Pipe automaticallyAddedPipe = frame.currentGame.getCurrPlayfield().getPipes().get(5);
assertTrue(automaticallyAddedPipe.getHasWater());

}
}

0 comments on commit aabbe0a

Please sign in to comment.