2010-10-18 4 views
1

Можно ли использовать контейнер для создания объектов, которые будут протестированы? Или я должен строить их вручную?IoC Container + Unit Testing

ответ

2

Да, это нормально и хорошо, и котята не будут убивать. Имейте в виду, что контейнеры IoC полезны для трех вещей:

  1. объект композиции.
  2. управление жизненным циклом.
  3. перехват.

Если вы нуждаетесь в любом из этих трех предметов, почему бы не позволить инструменту, созданному для работы, сделать это за вас?

+0

Огромное спасибо =) – HappyDeveloper

1

Да и нет.

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

Почему вы это рассматриваете? Будет ли рулонный эквивалент просто утомительным (это всегда так), или это будет сложно? Если это последний, тогда вы накладываете ленту на проблему.

+0

Нет, это не так сложно, но возник вопрос, и я хотел знать, было ли такое правило, как «НИКОГДА не используйте контейнер при тестировании» или «если объекты будут созданы с контейнером в реальное приложение, они должны быть созданы с контейнером в тестах Спасибо за ответ, хотя я до сих пор не знаю, является ли это плохой практикой. Я знаю, что не должен был, но так или иначе. – HappyDeveloper

+0

Похоже, вы должны быть в порядке; это всегда о том, чтобы держать вещи под контролем. Для приличного разговора о IoC/DI, идущем далеко, ознакомьтесь с http://blog.objectmentor.com/articles/2010/01/17/dependency-injection-inversion – STW

+0

Смотрите этот ответ: http://ayende.com/ blog/archive/2010/01/22/rejecting-dependency-injection-inversion.aspx, а также http://blog.ploeh.dk/2010/01/25/DependencyInjectionInversionInNET.aspx – jason

0

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

http://wiki.answers.com/Q/What_is_stubs_and_drivers_in_software_testing

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