Piszę testy jednostkowe systemu sterowania dla gry wideo. System ma kilka zachowań (unikaj tego obszaru z powodu przyczyny A, unikaj tego obszaru z powodu przyczyny B, każde z nich dodaje trochę kontekstu do mapy regionu. Oddzielna funkcja następnie analizuje mapę i wykonuje pożądany ruch.
Mam problem z podjęciem decyzji, jak napisać testy jednostkowe dla zachowań. Jak sugeruje TDD, interesuje mnie tylko to, jak zachowania wpływają na pożądany ruch. Na przykład unikanie z powodu powodu powinno skutkować odejściem od sugerowanej złej pozycji. Nie obchodzi mnie, w jaki sposób i dlaczego zachowanie dodaje kontekst do mapy, tyle że pożądany ruch jest z dala od pozycji.
Więc moje testy dla każdego zachowania konfigurują zachowanie, zapisują je na mapie, a następnie wykonują funkcję parsowania mapy w celu wypracowania pożądanego ruchu. Jeśli ten ruch spełnia moje wymagania, jestem szczęśliwy.
Jednak teraz moje testy zależą zarówno od poprawnego działania, jak i od prawidłowej funkcji analizy mapy. Jeśli funkcja parsowania zawiedzie, dostanę setki nieudanych testów zamiast kilku. Wiele przewodników po pisaniu testów sugeruje, że jest to zły pomysł.
Jeśli jednak przetestuję bezpośrednio wyniki wyjściowe zachowań, wyśmiewając mapę, to na pewno zbyt mocno wiążę się z implementacją? Jeśli mogę uzyskać ten sam pożądany ruch z mapy, używając nieco innego zachowania, testy powinny nadal przejść.
Więc teraz cierpię na dysonans poznawczy. Jak najlepiej ustrukturyzować te testy?