Как сломать зависимости без изменения производственного кода? - PullRequest
1 голос
/ 17 июня 2009

Исходя из моих начальных чтений по модульному тестированию (я новичок), было бы разумно поместить все ваши настройки и тесты в отдельный проект из тестируемого кода. Мне это тоже кажется идеальным. Тем не менее, я недавно начал читать «Искусство модульного тестирования», пытаясь выяснить, как сломать зависимости от таких вещей, как вызовы базы данных. Предлагаемые методы включают изменение областей тестового кода, таких как добавление определенных интерфейсов и методов-заглушек в производственный код. Похоже, это лишает нас некоторых преимуществ, связанных с разделением тестов и рабочего кода.

Есть ли какая-либо рекомендуемая техника нарушения зависимости, которая не включает изменение производственного кода?

Ответы [ 3 ]

4 голосов
/ 17 июня 2009

Нет способа разорвать зависимости без внесения каких-либо изменений. Важно то, что сделанные вами изменения не влияют на поведение производственного кода в рабочей среде и что вы не вводите худшие зависимости.

3 голосов
/ 17 июня 2009

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

Если вы написали слабосвязанный производственный код - код, который опирается на интерфейсы, а не на реализации, который использует фабрики и внедрение зависимостей для создания объектов, а не для прямой реализации - тогда вам может потребоваться лишь внести небольшие изменения или ничего не делать вообще к вашему производственному коду. Если нет, то вам нужно будет внести эти типы изменений. Однако это не так уж плохо, так как улучшит ваш дизайн за счет уменьшения связи между классами. Стоимость этого будет составлять несколько дополнительных (небольших) классов и / или интерфейсов, которые делают возможной изоляцию.

Если вы используете TDD (Test Driven Development / Design), типы конструкций, которые вы используете в своем рабочем коде, изменятся, чтобы сделать его более естественным для тестирования. Это один из способов, с помощью которых TDD работает над улучшением дизайна и включением тестирования в ваш код.

Обратите внимание, что вам не нужно вводить связи или зависимости в вашем рабочем коде в ваш тестовый код. Ваш тестовый код, очевидно, будет зависеть от производства, и вам может потребоваться рефакторинг зависимостей в производстве, чтобы сделать его более тестируемым, но если ваш производственный код «знает» что-либо о том, как он тестируется, вы, вероятно, сделали что-то не так. Вы, вероятно, ввели искусственные интерфейсы, когда должны использовать внедрение зависимостей.

0 голосов
/ 17 июня 2009

Мы используем Spring вместе с фабриками, чтобы сломать зависимости. С внедрением зависимости Spring, переходя от разработки и тестирования к производству - это просто другой файл XML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...