Нужен ли модуль Guice для каждого класса для написания интеграционных тестов? - PullRequest
0 голосов
/ 26 сентября 2011

В настоящее время у меня есть 1 модуль Guice в моем проекте, который определяет все привязки. Теперь я хочу написать интеграционные тесты, и мне нужно связать зависимости определенного класса. Если я использую существующий модуль, Guice свяжет все зависимости. Но я думаю, что это не правильно для интеграционных тестов.

Итак, нужен ли для каждого класса модуль, который будет связывать только необходимые зависимости?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

Создание одного модуля Guice для привязки всех привязок в проекте не является оптимальным, но и создание одного модуля для привязки не является оптимальным.

В общем, вы просто хотите "сгруппировать связанные привязки в модуль". Это скорее искусство, нежели наука, поэтому я не могу дать идеальный совет.

Если ваш проект имеет твердую структуру пакетов Java, то для начала лучше всего создать по одному модулю Guice на пакет (хотя, если ваши пакеты содержат много классов, вам может понадобиться даже несколько пакетов). Использование модулей Guice для каждого пакета также дает вам преимущество, позволяя вам сделать ваши классы реализации закрытыми для пакета (что хорошо для инкапсуляции!).

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

В качестве костыля вы также можете использовать Modules.override(...) [1], но это, как правило, признак того, что ваши модули слишком велики.

  1. http://google -guice.googlecode.com / SVN / багажник / Javadoc / COM / Google / инъекционные / Util / modules.html
1 голос
/ 27 сентября 2011

Да, у вас может быть более одного модуля, и обычно вам нужен другой для ваших тестов. Если вы не использовали инъекцию поля, и это не слишком большая работа, вы можете настроить свои классы с помощью конструкторов, которые передают проверенные объекты, включая mocks.

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

...