HTX Frederikshavn & Hjørring

Det har aldrig været sjovere at være nørd

Brugerværktøjer

Webstedsværktøjer


prog:test_exercise4

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:

  1. board fyldes med 0
  2. currentPlayer = 1
  3. gameState = RUNNING

Tests:

  1. shouldInitializeBoardWithZeros()
  2. shouldSetCurrentPlayerToOne()

UC2 – Placere brik

Trigger: placeMark(row, col)

Forudsætninger:

  1. gameState == RUNNING
  2. Felt er tomt
  3. Position er gyldig (0-2)

System:

  1. board[row][col] = currentPlayer
  2. Tjek for sejr/uafgjort
  3. Skift spiller hvis spil fortsætter
  4. Return true

Tests:

  1. shouldPlaceMarkOnEmptyField()
  2. shouldSwitchPlayerAfterMove()

UC3 – Afvise ugyldigt træk

Situationer:

  1. Felt optaget
  2. Spil afsluttet
  3. Ugyldig position

System:

  1. Ingen ændring i board
  2. currentPlayer ændres ikke
  3. Return false

Tests:

  1. shouldNotPlaceOnOccupiedField()
  2. shouldNotAllowMoveWhenGameIsOver()

UC4 – Registrere sejr

Trigger: Efter gyldigt træk

System:

  1. 3 ens i række, kolonne eller diagonal
  2. gameState = WON
  3. Spillet stopper

Tests:

  1. shouldDetectHorizontalWin()
  2. shouldDetectVerticalWin()
  3. shouldDetectDiagonalWin()

UC5 – Registrere uafgjort

Trigger: Efter gyldigt træk

Forudsætning:

  1. Board fuldt
  2. Ingen vinder

System:

  1. gameState = DRAW

Test:

  1. shouldDetectDraw()

TDD Arbejdsgang

For hver use case:

  1. Skriv én test
  2. Se den fejle
  3. Implementér minimal kode
  4. Refaktorér
  5. Gentag
prog/test_exercise4.txt · Sidst ændret: af 127.0.0.1