Я пишу одиничні тести рульової системи для відеоігор. Система має декілька типів поведінки (уникайте цієї області через причину A, уникайте цієї області через причину B, кожен додаючи трохи контексту до карти регіону. Окрема функція потім аналізує карту і створює бажаний рух.
У мене виникають проблеми з вирішенням питання, як написати одиничні тести на поведінку. Як підказує TDD, мене цікавить лише те, як поведінка впливає на бажаний рух. Наприклад, ухилення від причини-A повинно призвести до віддалення від поганої позиції. Мені байдуже насправді, як і чому поведінка додає контексту на карту, лише те, що бажаний рух знаходиться далеко від позиції.
Тож мої тести на кожну поведінку встановлюють поведінку, змушують її записувати на карту, а потім виконує функцію аналізу карти для розробки потрібного руху. Якщо цей рух задовольняє мої характеристики, то я задоволений.
Однак тепер мої тести залежать як від поведінки, що працює правильно, так і від функції аналізу карти, що працює правильно. Якщо функція розбору не вдається, то я отримаю сотні невдалих тестів, а не пару. Багато посібників із написання тестів припускають, що це погана ідея.
Однак якщо я протестую безпосередньо проти результатів поведінки, глузуючи карту, то, напевно, я занадто щільно підключаюся до реалізації? Якщо я можу отримати такий же потрібний рух з карти, використовуючи дещо іншу поведінку, то тести все одно повинні пройти.
Тож зараз я страждаю на когнітивний дисонанс. Який найкращий спосіб структурувати ці тести?