2013-03-26 2 views
3

Итак, я читал об этой вещи под названием SOLID (смешанный с) Writing Testable Code. А затем конкретно о части D. Как следовать этим рекомендациям при использовании примитивных типов или методов/классов, предоставляемых языковой библиотекой.ТВЕРДЫЕ и модульные испытания. Использование языка, предоставляемого методами/классами

один также необходимо использовать Dependency Injection для массивов (Java (new int[64]) или членов класса, скажем, в FileWriter ?. ли эти необходимость быть впрыскивается с помощью DI или может класс еще инстанцирования их ли?

Как далеко вы должны следовать приведенным выше рекомендациям?

Я не ищу ответа на язык (если возможно). ИМХО ответ должен применяться, например, для PHP, Python Java, heck, even C

ответ

4

Обычно вы не вводите примитивы или объекты DTO/POJO. Причина в том, что те являются:

  1. Простых держатели стоимости без много бизнеса/домена логики, связанных
  2. Легко погасили без каких-либо дополнительных инструментов (создание массива фальшивых данных для тестирования не проблематичны)

FileWriter отличается тем, что находится в точном противостоянии указанным выше пунктам. Я не могу просто заглушить его в тесте и заставить его работать без малого strong Предположения - вроде бы, я предполагаю, что каждый будущий разработчик, запускающий этот код, будет иметь определенный файл на своей машине. Обычно это no-go для модульных тестов и одна из причин, по которым DI применяется в этих случаях.

Эти проблемы возникают из-за того, что FileWriter служит как точка связи между двумя несвязанными компонентами - ваше приложение и файловая система. Любой класс, выполняющий такую ​​интеграцию (между вашим приложением и DB/network/file/REST и т. Д.), В большинстве случаев должен быть абстрагирован и введен.

1

Инъекционные массивы являются излишними. ile писатель является абсолютной необходимостью. На самом деле инъекции писателя недостаточно. Авторы файлов сильно взаимодействуют с внешним миром, и вы этого не хотите. Писатель файла должен быть завернут в свой собственный класс и никогда не будет вызван напрямую.

Вместо этого вставьте интерфейс FileWriterWrapper. Таким образом, управляемость. Кроме того, взаимодействие файлов в модульном тесте является большой болью. Избегайте его любой ценой. То же самое касается взаимодействия с базами данных. Фактически, все взаимодействия с внешним миром должны быть обрезаны/издеваться над модульными тестами.

Красота такова, что дизайн SOLID и тестируемость идут рука об руку. Хороший дизайн означает тестируемый код. Если вам сложно проверить какой-либо код, это обычно указывает на недостаток вашего дизайна.

Смежные вопросы