• программирование The deep synergy between testability and good design — еще один доклад от Майкла Физерса. И начинает он с того, что проблемы с тестированием кода сигнализируют о проблемах с дизайном этого кода. Например, если у вас возникает желание протестировать приватные методы класса, скорее всего он делает слишком много и не следует принципу единственной ответственности. Некоторых разработчиков смущает то, что следование этому принципу приводит к появлению большого количества небольших классов. Но так ли это плохо? Да, в определенных случаях вам придется походить по файлам, чтобы разобраться как работает некоторая функциональность. Но это разделение упрощает поддержку кода. В большинстве случаев вам будет достаточно заменить один из этих небольших классов или добавить еще один небольшой класс вместо того, чтобы менять один большой и беспокоиться не сломали ли вы существующую функциональность.
    Далее Майкл задается вопросом: а что же затрудняет тестирование кода?
    1. Спрятанное в методе состояние — у вас длинный метод с многими локальными переменными и вы хотите протестировать работу этого метода при различных комбинациях значений этих переменных
    2. Сложная система — класс с многими зависимостями, необходимыми для его создания
    3. Неполное выключение — например, не освобождаются ресурсы или не переводятся в нужное состояние. В этом случае появится зависимость между тестами и они начнут падать, сигнализируя об имеющейся проблеме.
    4. Состояние перетекает из одного теста в другой — например, статическая изменяемая переменная или синглтоны
    5. Наличие фреймворка — если фреймворк затрудняет тестирование, то вы недостаточно разделили фреймворк и предметную область
    6. Сложности с моками — не нарушаете ли вы закон Деметра?
    7. Скрытые эффекты
    8. Скрытые входные данные — возможно вы перестарались с инкапсуляцией
    9. Громоздкий список параметров метода — нарушение принципа единственной ответственности
    10. Недоступность метода — этот случай рассмотрен в самом начале
    11. Круговерть тестов — при изменении кода меняется много тестов — вы нарушаете принцип открытости/закрытости

Replies (0)