TDD-mönster: testning av icke-deterministisk algoritm

Det verkar på ytan knivigt att testa en icke-deterministisk algoritm.

Låt oss säga att vi har en algoritm som givet indata Input ska ge ett Result-objekt som svar, där Result-objektet beror på "något icke-deterministiskt".

Detta går att lösa genom "dependency injection" så här:

  1. Skicka med slumptalsgeneratorn till algoritmen, säg Rnd()
  2. Använd Rnd() i den icke-deterministiska delen av algoritmen
Nu blir det mycket lättare att förutsäga vad Result blir givet ett visst Input-objekt. Vi kan helt enkelt skapa en dummy-slumptalsgenerator efter tycke i våran testfixtur, t.ex. en generator som alltid ger "0" i svar, eller kanske 1, 2, 3, ...

Plötsligt kan vi testa våran algoritm!

En nackdel med denna teknik är att testkoden blir ganska så "nära" algoritmens implementation, eftersom den i princip måste känna till exakt hur algoritmen kommer fram till sitt svar (i vilken ordning olika val görs i algoritmen beror ju på slumptaltsgeneratorn). Om det är någon som har en bra lösning på detta problem, ge mig tips :)

Kommentarer
Postat av: johan t

dags att du ökar publiceringsfrekvensen på din blogg

2008-01-30 @ 10:44:34

Kommentera inlägget här:

Namn:
Kom ihåg mig?

E-postadress: (publiceras ej)

URL/Bloggadress:

Kommentar:

Trackback
RSS 2.0