Ich schreibe Unit-Tests für ein Lenksystem für ein Videospiel. Das System hat verschiedene Verhaltensweisen (vermeiden Sie diesen Bereich aufgrund von Grund A, vermeiden Sie diesen Bereich aufgrund von Grund B, indem Sie jeweils ein wenig Kontext zu einer Karte der Region hinzufügen. Eine separate Funktion analysiert dann die Karte und erzeugt eine gewünschte Bewegung.
Ich habe Probleme bei der Entscheidung, wie ich die Unit-Tests für das Verhalten schreiben soll. Wie TDD vorschlägt, interessiert mich nur, wie sich das Verhalten auf die gewünschte Bewegung auswirkt. Zum Beispiel sollte das Vermeiden von Grund A zu einer Abkehr von der vorgeschlagenen schlechten Position führen. Es ist mir eigentlich egal, wie oder warum das Verhalten der Karte Kontext hinzufügt, nur dass die gewünschte Bewegung von der Position entfernt ist.
Meine Tests für jedes Verhalten richten das Verhalten ein, lassen es in die Karte schreiben und führen dann die Kartenanalysefunktion aus, um die gewünschte Bewegung zu ermitteln. Wenn diese Bewegung meinen Spezifikationen entspricht, bin ich glücklich.
Jetzt hängen meine Tests jedoch davon ab, dass sowohl das Verhalten als auch die Funktion zum Parsen der Karte ordnungsgemäß funktionieren. Wenn die Parsing-Funktion fehlschlägt, würde ich Hunderte von fehlgeschlagenen Tests anstelle von ein paar bekommen. Viele Leitfäden für das Schreiben von Tests halten dies für eine schlechte Idee.
Wenn ich jedoch direkt anhand der Ausgabe des Verhaltens teste, indem ich die Map verspotte, dann bin ich doch sicher zu eng mit der Implementierung verbunden? Wenn ich mit einem etwas anderen Verhalten die gleiche gewünschte Bewegung von der Karte erhalten kann, sollten die Tests dennoch erfolgreich sein.
Jetzt leide ich unter kognitiver Dissonanz. Wie lassen sich diese Tests am besten strukturieren?