Я склонен на сторону ваших коллег, но только до определенной степени.
Проблема с модульными тестами заключается в том, что они часто и бездумно пишутся в тривиальных случаях, когда беглое изучение кода показывает, что он будет работать, несмотря ни на что. Например:
def add(x, y)
x + y
end
Наряду с дюжиной тестов, чтобы убедиться, что дополнение действительно будет работать для произвольно выбранных вариантов использования. Duh ...
Общая предпосылка модульного тестирования: если ваш код не содержит ошибок, это потому, что вы недостаточно протестировали. Теперь, когда писать правильные юнит-тесты. ответы:
- Когда вы тестируете
- Когда вы отлаживаете
- Как вы разрабатываете действительно сложные вещи
Давайте рассмотрим каждый из них, предположим, что вы разрабатываете какое-то веб-приложение.
Вы пишете некоторый код для новой функциональности, и к настоящему времени он должен работать достаточно хорошо. Затем вы обращаетесь к своему браузеру и проверяете его работоспособность, проводя более интенсивное тестирование, верно? Bzzzt! ... Неправильный ответ. Вы пишете юнит-тест. Если вы не сделаете этого сейчас, вы, вероятно, никогда не будете. И это одно из мест, где модульные тесты работают очень хорошо: тестировать функциональность высокого уровня.
Затем вы обнаружите ошибку (кто никогда не пропускает?). Это подводит нас к пункту два. Вы возвращаетесь в код и начинаете следовать инструкциям. Как вы делаете, пишите модульные тесты в ключевых точках разрыва, где важно иметь согласованные и правильные данные.
Последний пункт - наоборот. Вы разрабатываете некоторую волосатую функциональность, которая включает в себя множество метапрограммирования. Он быстро порождает дерево решений с тысячами потенциальных сценариев, и вам нужно убедиться, что каждый из них работает. Когда вы пишете такие вещи, простое изменение здесь или там может привести к невообразимым последствиям дальше по пищевой цепочке. Скажем, вы разрабатываете реализацию MPTT с использованием триггеров SQL, чтобы она могла работать с многострочными операторами.
В такой непростой среде вам, как правило, нужно максимально автоматизировать свои тесты. Таким образом, вы пишете сценарии для автоматизации генерации тестовых данных и запускаете загрузку юнит-тестов для этих тестовых данных. Одна из важных вещей, которую вы не должны упускать из виду, это то, что вам также нужно написать модульные тесты для вашего генератора модульных тестов.
Итог: юнит тесты, определенно да. Но избавьтесь от базовых функций - пока они вам действительно не понадобятся для отладки или проверки правильности работы некоторых функциональных возможностей (включая, в последнем случае, сами тесты).