Skip to content

Commit 9fcd8a9

Browse files
committed
junit example tested code added
1 parent 985326a commit 9fcd8a9

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

_drafts/2019-01-14-junit.md

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,100 @@ Podstawą procesu testowania jest tworzenie i wykonywanie testów jednostkowych,
2424
## Dobre praktyki
2525
Tworząc metody testowe należy przede wszystkim pamiętać o wykluczeniu wszelkich zależności w taki sposób, aby na wynik testu testowanej jednostki nie miały wpływu inne zależności. Klasy testowe powinny znajdować się w pakiecie o tej samej nazwie co klasy implementacji, a nazwy klas testowych powinny być podobne do klas testowanych. Metody opisowe powinny być nazywane w sposób opisowy i jednoznaczny w nawiązaniu do celu testu nawet jeśli z tego powodu nazwa metody jest długa. W tym celu można posłużyć się konwencją `Given/When/Then`, gdzie `Given` określa warunki początkowe, `When` opisuje akcje, a `Then` informuje o oczekiwanym rezultacie. Ponadto należy dążyć do minimalizacji asercji, czasu wykonywania testów oraz zwiększać pokrycie kodu. Testy powinny być krótkie, proste i ściśle dotyczyć jednej jednostki. Jeśli sytuacja tego wymaga należy wykorzystywać metody cyklu życia testów, aby zapewnić odpowiednią inicjalizację i czyszczenie środowiska.
2626

27+
>**Przykład**
28+
>Klasa `Game` zarządza rozgrywką w grze komputerowej w której dwie przeciwne drużyny walczą o zwycięstwo zdobywając bramki. W odniesieniu do implementacji klasy `Game` zostaną przeprowadzone testy przedstawiające dobre praktyki oraz charakterystykę testów jednostkowych `JUnit4` dla Android.
29+
30+
{% highlight kotlin %}
31+
class Game {
32+
33+
private val redTeam = mutableListOf<String>()
34+
private val blueTeam = mutableListOf<String>()
35+
private var redGoals = 0
36+
private var blueGoals = 0
37+
private var gameStarted = false
38+
39+
fun start() {
40+
if(!gameStarted && teamsSizesEquals()) {
41+
gameStarted = true
42+
redGoals = 0
43+
blueGoals = 0
44+
//do and allow for some actions
45+
}
46+
}
47+
48+
fun stop() {
49+
if(gameStarted) {
50+
gameStarted = false
51+
//do some other actions
52+
}
53+
}
54+
55+
fun clearTeams() {
56+
redTeam.clear()
57+
blueTeam.clear()
58+
}
59+
60+
fun addPlayer(team: Team, player: String): Boolean {
61+
if(allowToAddPlayer(player)) {
62+
when(team) {
63+
Team.RED -> { redTeam.add(player) }
64+
Team.BLUE -> { blueTeam.add(player) }
65+
}
66+
return true
67+
}
68+
else return false
69+
}
70+
71+
fun removePlayer(player: String): Boolean {
72+
if(allowToRemovePlayer(player)) {
73+
if(redTeam.contains(player)) redTeam.remove(player)
74+
else blueTeam.remove(player)
75+
return true
76+
}
77+
else return false
78+
}
79+
80+
fun goal(team: Team) {
81+
when(team) {
82+
Team.RED -> { redGoals++ }
83+
Team.BLUE -> { blueGoals++ }
84+
}
85+
}
86+
87+
fun getScore(): String {
88+
return "RED $redGoals:$blueGoals BLUE"
89+
}
90+
91+
fun getRedTeam(): List<String> {
92+
return redTeam
93+
}
94+
95+
fun getBlueTeam(): List<String> {
96+
return blueTeam
97+
}
98+
99+
fun hasStarted(): Boolean {
100+
return gameStarted
101+
}
102+
103+
private fun allowToAddPlayer(player: String): Boolean {
104+
return (!gameStarted && !redTeam.contains(player) && !blueTeam.contains(player))
105+
}
106+
107+
private fun allowToRemovePlayer(player: String): Boolean {
108+
return (!gameStarted && (redTeam.contains(player) || blueTeam.contains(player)))
109+
}
110+
111+
private fun teamsSizesEquals(): Boolean {
112+
return redTeam.size != 0 && blueTeam.size != 0 && redTeam.size.equals(blueTeam.size)
113+
}
114+
115+
enum class Team {
116+
RED, BLUE;
117+
}
118+
}
119+
{% endhighlight %}
120+
27121
## Klasa testowa
28122
Testy w JUnit (metody) zawierają się w `klasie testowej`, które z kolei mogą być częścią `zestawu klas testowych`. Aby klasa była klasą testową w JUnit4 musi zawierać deklarację przynajmniej jednej metody testowej oznaczonej adnotacją `@Test`. Podstawowym elementem testów są asercje sprawdzające wartość logiczną, równość wartości czy referencji.
29123

0 commit comments

Comments
 (0)