Тестирование Silverlight 4 Unit;Загружена неверная версия mscorlib - PullRequest
0 голосов
/ 07 декабря 2011

Я пытался разработать некоторые модульные тесты для проекта Silverlight 4 в MSTest, но у меня возникли некоторые проблемы с их запуском. В моем коде я использую некоторые выражения (System.Linq.Expressions), и они работают правильно, когда я запускаю программу в нормальных условиях. Однако, если какой-либо из этого кода встречается во время модульного теста, я получаю «MissingMethodException» для типа «AppDomain»

Я отследил проблему до того факта, что AppDomain определен в mscorlib.dll. Когда я запускаю программу нормально, загружается версия 2.0.5.0 mscorlib (Silverlight 4), а при тестировании модулей загружается версия 2.0.0.0. Все ссылки в моем тестовом и обычном проектах верны, поэтому я не могу понять, почему MSTest загружает неправильную версию.

Есть ли какой-нибудь способ заставить MSTest или VSTestHost действительно загрузить правильную версию mscorlib? (2.0.5.0)

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Проблема заключается в том, что вы используете одну версию .NET Framework для запуска тестов, а другую - для запуска вашего кода в обычных условиях. Silverlight и .NET достаточно совместимы, так что сборки Silverlight часто можно без проблем использовать из .NET (даже если Visual Studio выдает предупреждение по ссылке), но есть несколько исключений.

Например, запустив код Silverlight таким способом, вы не можете использовать ни один из классов пользовательского интерфейса Silverlight. (Любой FrameworkElement, DependencyObject, Dispatcher или аналогичный), поскольку для них требуется правильное время выполнения. Я не удивлен, что AppDomain также попадает в эту категорию.

Чтобы обойти эту проблему, вы можете либо проверить только тот код, который не зависит от классов, как указано выше, либо вы можете кросс-компилировать ваш исходный код как полные проекты .NET. Последнее не решает проблемы несовместимости для вас, но позволяет вам скомпилировать несколько разные версии вашего кода, чтобы код скомпилировался и работал без ошибок.

Обратите внимание, что mscorlib не является сборкой .NET, как любая другая, она полна неприятных ссылок на собственный код и не может использоваться каким-либо осмысленным образом за пределами запланированного времени выполнения.

0 голосов
/ 07 декабря 2011

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

Edit: У некоторых есть успехи в модульном тестировании с использованием MSTest. Однако, чтобы сделать это, вы должны сделать несколько трюков. И юнит-тесты не выполняются в среде SL4, поэтому результаты юнит-тестов недействительны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...