У меня все еще есть проблемы, оправдывающие TDD для меня. Как я уже упоминал в других вопросах, 90% кода, который я пишу, абсолютно ничего, кроме
- Вызов некоторых функций Windows API и
- Распечатайте данные, возвращенные из указанных функций.
Время, затрачиваемое на поддельные данные, которые код должен обрабатывать в TDD, невероятно - я буквально трачу в 5 раз больше времени на получение данных примера, поскольку я бы потратил только написание кода приложения.
Часть этой проблемы заключается в том, что я часто программирую против API, с которыми у меня мало опыта, что заставляет меня писать небольшие приложения, которые показывают мне, как ведет себя настоящий API, чтобы я мог писать эффективные подделки /mocks поверх этот API. Написание реализации в первую очередь является противоположностью TDD, но в этом случае это неизбежно: я не знаю, как ведет себя настоящий API, так как я собираюсь создать фальшивую реализацию API, не играя с ним?
Я прочитал несколько книг по этому предмету, в том числе "Кент Бек", разработанный на основе тестирования, например, и "Эффективные действия Майкла Перса" с устаревшим кодом, который, похоже, является евангелием для фанатиков TDD. Книга "Перья" приближается к тому, как она описывает разрастающиеся зависимости, но даже в этом случае приведенные примеры имеют одну общую черту:
- Программа под тестированием получает ввод от других частей тестируемой программы.
Мои программы не соответствуют этому шаблону. Вместо этого единственным входом самой программы является система, с которой она запускается.
Как эффективно использовать TDD для такого проекта? Я уже обертываю большую часть API внутри классов С++, прежде чем на самом деле использую этот API, но иногда сами обертки могут стать довольно сложными и заслуживают собственных тестов.