prog:test_exercise4
Indholdsfortegnelse
Kryds & Bolle – the TDD way
System
Engine-klasse der håndterer:
- int[][] board = new int[3][3]
- To spillere. currentPlayer (1 eller 2)
- gameState (RUNNING, WON, DRAW)
Software skal som udgangspunkt ikke have en GUI.
Use-cases
- Vi vil behandle engine-API’et som systemets grænseflade
- Og lade tests simulere en aktør
Jeg har identificeres følgende use-cases for kryds og bolle.
- UC1 – Initialisere spil
- UC2 – Placere brik
- UC3 – Afvise ugyldigt træk
- UC4 – Registrere sejr
- UC5 – Registrere uafgjort
- UC6 – Nulstille spil
Hvilke use cases kan vi implementere først, så andre bliver lettere?
Hvis en use case kræver en anden for at give mening, så implementér den anden først.
UC1 – Initialisere spil
Trigger: Opret engine eller kald reset()
System:
- board fyldes med 0
- currentPlayer = 1
- gameState = RUNNING
Tests:
- shouldInitializeBoardWithZeros()
- shouldSetCurrentPlayerToOne()
UC2 – Placere brik
Trigger: placeMark(row, col)
Forudsætninger:
- gameState == RUNNING
- Felt er tomt
- Position er gyldig (0-2)
System:
- board[row][col] = currentPlayer
- Tjek for sejr/uafgjort
- Skift spiller hvis spil fortsætter
- Return true
Tests:
- shouldPlaceMarkOnEmptyField()
- shouldSwitchPlayerAfterMove()
UC3 – Afvise ugyldigt træk
Situationer:
- Felt optaget
- Spil afsluttet
- Ugyldig position
System:
- Ingen ændring i board
- currentPlayer ændres ikke
- Return false
Tests:
- shouldNotPlaceOnOccupiedField()
- shouldNotAllowMoveWhenGameIsOver()
UC4 – Registrere sejr
Trigger: Efter gyldigt træk
System:
- 3 ens i række, kolonne eller diagonal
- gameState = WON
- Spillet stopper
Tests:
- shouldDetectHorizontalWin()
- shouldDetectVerticalWin()
- shouldDetectDiagonalWin()
UC5 – Registrere uafgjort
Trigger: Efter gyldigt træk
Forudsætning:
- Board fuldt
- Ingen vinder
System:
- gameState = DRAW
Test:
- shouldDetectDraw()
TDD Arbejdsgang
For hver use case:
- Skriv én test
- Se den fejle
- Implementér minimal kode
- Refaktorér
- Gentag
prog/test_exercise4.txt · Sidst ændret: af 127.0.0.1
