Вопрос

Я пытаюсь смоделировать IUnityContainer с помощью Moq 3.0

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

здесь

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

здесь

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

здесь

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

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

Это было полезно?

Решение

Вы не делаете.

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

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

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

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

Другие советы

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

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

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

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

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

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

  

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

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

Изменить.

Также взгляните на это ТАК. Загляните в свой менеджер конфигурации сборки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top