В разработке я относительно недавно и несколько недель назад задумался над тем, что не тестирую свой код. Непорядок. Начал читать книгу Кент Бека про TDD. Уловил главную идею - "красный" - "зеленый" - "рефакторинг". Ну и что желательно двигаться маленькими шажками, чтобы проще было.
Начал кодить в таком стиле и понял, что порой просто захожу в тупик, не зная, что тестировать и как. Например, отправка почты, как тестировать? Отправлять себе письмо? По сути, я тестировал полностью весь класс, стараясь покрыть каждый метод хоть небольшим тестом, чтобы удостовериться, что он работает. Я задумался, возможно стоит не полностью покрывать код тестами, а только те части, где сложная логика.
Опытные разработчики, посоветуйте, как лучше осваивать тестирование, стоит ли дальше двигаться в направлении TDD или может нужно повременить, опыта поднабраться в тестировании. Что нужно тестировать и как? Возможно есть правила, которые вы выработали для себя.
Ответ
Вы все делаете правильно - нужно писать тесты с самого начала и стремится к большему % покрытию кода. То, что Вы не можете придумать, как и что протестировать с опытом пройдет, а в данный момент можно тестировать, как получается. Относительно того как тестировать методы/классы или реализуемую ими функциональность то могу предложить сначала определится с методологией тестирования для начала посмотрите на: тестирования по стратегии белого ящика и тестирования по стратегии чёрного ящика
Что нужно тестировать и как?
По моему мнению и опыту тестировать в первую очередь нужно всю «нетипичную» логику. То есть те специфичные вещи которые Вы пишите для данного приложения, а не то что данные из базы выгружаются верно (хотя это тоже нужно протестировать) или метод действительно открывает файл.
Я стараюсь в первую очередь тестировать самые важные куски кода которые в случае если будут изменены обязательно должны сигнализировать разработчику (не прохождением теста), что логика работы стала отлична от ожидаемой (тестом), что должно обязать разработчика актуализировать тест.
Относительно того как тестировать – для критически важных участков кода я применяю сразу несколько тестов: на функциональность (черный ящик) – подаю все возможные значения на вход и проверяю на соответствие выходного значения или выбрасывания исключения, или наличие/отсутствие побочного эффекта, и код с помощью критериев покрытия MC/DC
Комментариев нет:
Отправить комментарий