Как вы издеваетесь над IUnityContainer?
-
19-08-2019 - |
Вопрос
Я пытаюсь смоделировать 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-битовые окна /
Изменить.
Также взгляните на это ТАК. Загляните в свой менеджер конфигурации сборки.