Sto scrivendo test unitari per un sistema di guida per un videogioco. Il sistema ha diversi comportamenti (evita quest'area a causa della ragione A, evita quest'area a causa della ragione B, ciascuno aggiungendo un po 'di contesto a una mappa della regione.) Una funzione separata quindi analizza la mappa e produce un movimento desiderato. p>
Ho difficoltà a decidere come scrivere i test unitari per i comportamenti. Come suggerisce TDD, mi interessa solo il modo in cui i comportamenti influenzano il movimento desiderato. Ad esempio, evitare-perché-della-ragione-A dovrebbe comportare un allontanamento dalla cattiva posizione suggerita. Non mi interessa davvero come o perché il comportamento aggiunge contesto alla mappa, solo che il movimento desiderato è lontano dalla posizione.
Quindi i miei test per ogni comportamento impostano il comportamento, lo fanno scrivere sulla mappa, quindi eseguono la funzione di analisi della mappa per calcolare il movimento desiderato. Se quel movimento soddisfa le mie specifiche, allora sono felice.
Tuttavia ora i miei test dipendono dal corretto funzionamento di entrambi i comportamenti e dal corretto funzionamento della funzione di analisi della mappa. Se la funzione di analisi fallisce, otterrei centinaia di test falliti piuttosto che un paio. Molte guide per la scrittura di test suggeriscono che questa è una pessima idea.
Tuttavia, se provo direttamente contro l'output dei comportamenti prendendo in giro la mappa, allora sicuramente sto accoppiando troppo strettamente all'implementazione? Se riesco a ottenere lo stesso movimento desiderato dalla mappa usando un comportamento leggermente diverso, i test dovrebbero comunque passare.
Quindi ora soffro di dissonanza cognitiva. Qual è il modo migliore per strutturare questi test?