Java - Unit Testing

From Coders.Bay Wiki
Revision as of 16:50, 19 December 2021 by Mike (talk | contribs) (→‎Tag 1)
Jump to navigation Jump to search

Tag 1

JUnit

Aufgabe: Tic Tac Toe

In order for the Unit Tests to work, you need to add JUnit5 to the class path. When you hover over the @Test annotation in the test class and press Alt+Einfg you should get a suggestion that provides the Add JUnit4 to classpath functionality. Goal

In the end an examplaray TicTacToe game should look like this:

Welcome to TicTacToe Player 1 choose your field [1-9] 5

| | 
|X| 
| | 

Player 2 choose your field [1-9] 1

O| | 
 |X| 
 | | 

Player 1 choose your field [1-9] 3

O| |X
 |X| 
 | | 

Player 2 choose your field [1-9] 7

O| |X
 |X| 
O| | 

Player 1 choose your field [1-9] 4

O| |X
X|X| 
O| | 

Player 2 choose your field [1-9] 6

O| |X
X|X|O
O| | 

Player 1 choose your field [1-9] 8

O| |X
X|X|O
O|X| 

Player 2 choose your field [1-9] 2

O|O|X
X|X|O
O|X| 

Player 1 choose your field [1-9] 9

O|O|X
X|X|O
O|X|X

The game is over. It' a draw.

Or another game with an early win:

Welcome to TicTacToe Player 1 choose your field [1-9] 1

X| | 
 | | 
 | | 

Player 2 choose your field [1-9] 5

X| | 
 |O| 
 | | 

Player 1 choose your field [1-9] 2

X|X| 
 |O| 
 | | 

Player 2 choose your field [1-9] 4

X|X| 
O|O| 
 | | 

Player 1 choose your field [1-9] 3

X|X|X
O|O| 
 | | 

The game is over. Player 1 won!

Tag 2

Aufgabe: Game of Life Unit Testen

Erweitere dein Game of Life um Unit Tests. https://wiki.streampy.at/index.php?title=Java_-_Methoden#Aufgabe:_Game_of_Life

Kompetenzcheck

Aufgabe: Sum of Two mit Tests

Gegeben sind zwei int-Arrays a und b, mit beliebigen Werten und ein Zielwert (target value) v. Finde heraus, ob es ein Nummernpaar gibt, wobei ein Wert aus a und der andere Wert aus b sein muss, die in Summe den Zielwert v ergeben. Es soll true zurückgegeben werden, falls es so ein Paar gibt, andernfalls false.

Schreibe die Methode sumOfTwo(int[] a, int[] b, int v) wie oben beschrieben. Die Lösung soll möglichst effizient sein, also kein!! Bruteforce.

Hier folgen zwei Beispiele für das oben beschriebene Problem:

int[] a = [1,2,3];
int[] b = [10,20,30,40];
int v = 42;

Die Methode sumOfTwo gibt true zurück, da 40 + 2 = 42 ist. a und b müssen nicht sortiert sein und können auch mehrmals den gleichen Wert beinhalten.

int[] a = {0,0,-5,30212};
int[] b = {-10,40,-3,9};
int v = -8;

Es wird wieder true returned, da −5 + (−3) = −8 ist. Wichtig: Denke daran, dass Arrays in Java 231 − 1 Elemente enthalten können

  • kein Bruteforce.
  • HashSets sind hilfreich, da sie einfügen und lesen in effizienter und vor allem

konstanter Zeit ermöglichen. https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/ util/HashSet.html

  • Natürlich könnt ihr die Aufgabe auch in Kotlin schreiben
// HashSet für int - Werte
HashSet<Integer> hashSet = new HashSet<>();

Mit Bruteforce ist gemeint, dass jedes einzelne Element aus a mit jedem einzelnen Element aus b addiert wird und danach mit v verglichen wird. Hier ein Beispiel:

a = [1, 2, 3]
b = [4, 5, 6]
v = 7
a[0] = 1
b[0] + a[0] = 7?
.
.
b[3] + a[0] = 7
return true