Я пишу юнит-тесты для системы рулевого управления для видеоигры. Система имеет несколько вариантов поведения (избегайте этой области по причине A, избегайте этой области по причине B, каждый из которых добавляет немного контекста к карте региона. Затем отдельная функция анализирует карту и производит желаемое движение.
У меня проблемы с решением, как написать модульные тесты для поведения. Как предполагает TDD, меня интересует только то, как поведение влияет на желаемое движение. Например, избегание по причине причины A должно привести к отходу от предполагаемой плохой позиции. Меня не волнует, как и почему поведение добавляет контекст на карту, только то, что желаемое движение находится вдали от позиции.
Поэтому мои тесты для каждого поведения настраивали поведение, заставляли его записывать на карту, а затем выполняли функцию анализа карты, чтобы выработать желаемое движение. Если это движение удовлетворяет моим требованиям, я счастлив.
Однако теперь мои тесты зависят как от правильного поведения, так и от функции синтаксического анализа карты. Если функция синтаксического анализа завершится неудачно, я получу сотни неудачных тестов, а не пару. Многие руководства по написанию тестов предполагают, что это плохая идея.
Однако, если я протестирую напрямую по результатам поведения путем макетирования карты, то наверняка я слишком тесно связан с реализацией? Если я могу получить то же самое желаемое движение с карты, используя немного другое поведение, тогда тесты все равно должны пройти.
Так что теперь я страдаю от когнитивного диссонанса. Каков наилучший способ структурировать эти тесты?