Одна из немногих вещей, с которыми согласны большинство разработчиков программного обеспечения, заключается в том, что вы не должны полагаться на то, что код работает правильно, если вы его не тестируете. Если вы не протестируете его, возможно, в нем есть скрытые ошибки, которые только приведут вас к дальнейшей работе в будущем.
Я понимаю, как тестировать мой обычный код, но как мне проверить свой тестовый код, чтобы убедиться, что он может эффективно находить и сообщать об ошибках, когда они присутствуют? Лично я был достаточно глуп, чтобы писать ошибочные контрольные примеры, которые проходили бы, когда их не должно было быть, таким образом, в первую очередь, побеждал цель моих письменных тестов. К счастью, я вовремя обнаружил и исправил ошибки, но, согласно мантре тестирования, кажется, что ни один набор тестов не будет полным без собственного набора тестов, чтобы убедиться, что он работает.
Мне кажется, что лучший способ сделать это - убедиться в том, что тест завершился неудачно для кода с ошибками. * Если я потрачу 2 минуты попеременно на добавление ошибок в код и убедитесь, что он не работает, у меня должна быть приемлемая степень уверенности в том, что тесты «работа». Это подводит меня ко второму вопросу: как можно исправить ошибки, чтобы убедиться, что они обнаружены тестовыми примерами? Должен ли я просто случайно закомментировать операторы, убедиться, что if-else
запускается неправильная ветвь an , отрицая ее условие, и изменить порядок выполнения кода с побочными эффектами и т. Д., Пока я не буду удовлетворен, мои тесты поймают большинствообщие ошибки? Как профессиональные разработчики подтверждают, что их тесты действительно выполняют то, что должны делать? Они просто предполагают, что тесты работают, или они тоже не торопятся? Если да, то как они тестируют тесты?
Я не предлагаю людям тратить так много времени на тестирование своих тестов, а затем тестирование тестов для своих тестов, чтобы они никогда не писали реальный код, но я сделал достаточно глупых вещей, которые, как мне кажется, могли бы немного выиграть о «мета-тестировании», и ему было любопытно, как это сделать. : D
* Я мог бы проверить, проходит ли тест при тестировании «безошибочного» кода, но использование кода в качестве спецификации для теста выглядит довольно задом наперед ...