Вопрос Джоэла был примерно таким. Предположим, вы хотели немного настроить что-то, что привело к отображению изображения с низким разрешением, а не изображения с высоким разрешением. Как бы вы использовали TDD, чтобы заставить это работать? Вы могли бы написать тест, который очищал экран, чтобы показать, что изображение было низким?
Конечно нет. Вы уже знаете, что библиотека JPEG работает. Вы уже знаете, что если вы назовете его правильными аргументами, он будет отображаться с низким разрешением. Что вам нужно проверить, так это то, что бит, который вы установили, преобразуется в соответствующие вызовы в библиотеку JPEG. Таким образом, вы издеваетесь над библиотекой JPEG с помощью очень простого модуля, контролируемого вашим тестом. Затем вы устанавливаете бит и запрашиваете отображение. Библиотека Mocked JPEG будет помнить, как она была вызвана, а затем тест может проверить, чтобы она была вызвана правильно.
ОК, так как бы вы протестировали внутренности библиотеки JPEG? Я не очень много знаю о JPEG-рендеринге, но я предполагаю, что это касается сжатия, декомпрессии и растровых изображений. Сжатие и декомпрессия - это просто алгоритмы. Алгоритмы имеют предсказуемые результаты с заданных входных данных.Таким образом, вы создали серию очень простых входов и убедитесь, что вы получаете прогнозируемые выходы. Вы настраиваете входы так, чтобы внутренняя часть алгоритмов JPEG была покрыта. Такая же логика выполняется для растровых изображений. Вам не нужно отображать их на экране. Простые маленькие растровые изображения могут быть отображены в буферы памяти, которые могут проверяться. Простым я имею в виду ПРОСТО. 3X3, 5X5, 8X8. Просто. Опять же, вы структурируете свои входные данные, чтобы покрыть основную часть кода.
Ничто из этого не является наукой о ракетном оружии. Нет, если он совершенен. Но набор из 50 тестов, который показывает, что 90% вашей логики является правильным, может иметь огромное значение, если вы хотите внести изменения.
Можете ли вы полностью устранить ручное тестирование? Конечно нет. Но вы можете значительно смягчить его. Вы можете уменьшить ручное тестирование до нескольких очень стратегических тестов, а не тысяч утомительных планов испытаний.
И, пожалуйста, мы можем теперь * всегда * относятся к нему как «The Notorious Stackoverflow # 38» или TNS # 38 ;-) –