Как вы издеваетесь над IUnityContainer? - PullRequest
5 голосов
/ 16 марта 2009

Я пытаюсь смоделировать IUnityContainer, используя Moq 3.0

Я получаю исключение BadImageFormatException, но не при отладке. Судя по всему, я не единственный, кто столкнулся с этой проблемой.

здесь

И это зарегистрированная проблема для Moq

здесь

Мне просто любопытно, нашел ли кто-нибудь решение ... самое близкое, что я нашел, - это хорошее решение, которое использует RhinoMock Роя Ошерова

здесь

но мне очень нравится Мок! Так что я действительно не хочу переключаться на Rhino Mock, но я буду, если я должен

Заранее спасибо!

Ответы [ 5 ]

4 голосов
/ 16 сентября 2011

Вы не.

Единственная причина издеваться над контейнером, если вы его разносите. Это анти-паттерн.

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

Если вам нужно создавать экземпляры на лету, используйте Автоматические фабрики .

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

1 голос
/ 09 ноября 2009

Вы пробовали издеваться над UnityBaseContainer или UnityContainer вместо IUnityContainer, аля этот пост Рори Примроуз? Он имеет дело с RhinoMocks, но, поскольку я думаю, что проблема связана с внутренним использованием Касла в Moq, вы можете решить эту проблему таким образом.

1 голос
/ 24 марта 2009

Вам нужен полноценный макет объекта? Не могли бы вы обойтись, просто внедрив подделку? То есть, реализовать тестовую реализацию интерфейса IUnityContainer и переопределить метод, с которым вам нужно взаимодействовать?

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

0 голосов
/ 18 сентября 2011

Вы запускаете это на Win x64? Посмотрите на эту страницу . Это ясно подсказывает.

Это исключение выдается, когда формат файла библиотеки динамических ссылок (файл .dll) или исполняемого файла (файл .exe) не соответствует формату, ожидаемому общеязыковой средой выполнения.

Кроме того, эта запись в блоге, предлагающая изменить флаг компиляции с любого процессора на x86, может помочь в этом. http://filips.net/archives/2008/01/17/getting-badimageformatexception-in-64-bit-windows/

Редактировать:

Также взгляните на этот ТАК. Загляните также в свой Build Configuration Manager.

0 голосов
/ 08 ноября 2009

Из-за этой проблемы я не высмеиваю IUnityContainer, вместо этого я использую реальный экземпляр UnityContainer. Это не идеально, но я могу проверить регистрацию, убедившись, что контейнер может разрешать типы соответствующим образом.

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

...