Sto scrivendo unit test per un sistema di guida per un videogioco. Il sistema ha diversi comportamenti (evitare quest'area a causa del motivo A, evitare quest'area a causa del motivo B, ognuno aggiungendo un po 'di contesto a una mappa della regione. Una funzione separata quindi analizza la mappa e produce il movimento desiderato.
Ho problemi a decidere come scrivere i test unitari per i comportamenti. Come suggerisce TDD, sono interessato solo a come i comportamenti influenzano il movimento desiderato. Ad esempio, evitare a causa della ragione A dovrebbe comportare un movimento lontano dalla posizione sbagliata suggerita. In realtà non mi interessa 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 esegue la funzione di analisi della mappa per elaborare il movimento desiderato. Se quel movimento soddisfa le mie specifiche, allora sono felice.
Tuttavia ora i miei test dipendono da entrambi i comportamenti che funzionano correttamente e che la funzione di analisi della mappa funziona correttamente. Se la funzione di analisi fallisce, allora otterrei centinaia di test falliti piuttosto che un paio. Molte guide per la scrittura di test suggeriscono che questa è una cattiva idea.
Tuttavia, se provo direttamente contro l'output dei comportamenti deridendo la mappa, allora sicuramente mi 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?