На моем сервере сборки я получаю только заглушки, а не родинки
Мы используем Moles, чтобы протестировать часть нашего унаследованного кода. В настоящее время все наши модульные тесты проходят при локальном запуске с использованием либо MSTest, либо Resharper's runner. Однако при запуске на сервере сборки (мы используем слегка измененный рабочий процесс TFS 2010, используя MSBuild и MSTest) все наши тесты Moles не пройдены.
Когда я посмотрел на причину, это было потому, что при создании файла.Moles.dll на сервере сборки были созданы только заглушки (классы с префиксом "S"), но ни один из классов Moles (классы с префиксом "M").
Наш код все еще компилируется, потому что один из наших разработчиков создал Framework для Moles, чтобы упростить синтаксис, который использует выражения и делегаты, чтобы работать с Moles, как с Moq. Фреймворк использует Reflection, чтобы получить версию методов Moles, но поскольку классы "M" созданы, она выдает исключение NullReferenceException при попытке получить метод, потому что вызов Assembly.GetType возвращает значение null.
РЕДАКТИРОВАТЬ: последняя версия библиотеки Pex & Moles установлены на сервере сборки.
РЕДАКТИРОВАТЬ 2: Вот командная строка, которая находится в журнале MSBuild
"C:\Program Files (x86)\Microsoft Moles\bin\moles.exe" @"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\obj\Debug\Moles\moles.args"
И содержание "moles.args"
Common.Logging.moles;DeltaNetUtils.moles;System.configuration.moles /molesfilesonly /referenceassemblies:"<lots-of-dll-files>" /cachepath:"C:\Program Files (x86)\Microsoft Moles\bin\..\MolesAssemblies" /intermediatepath:"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\obj\Debug\Moles" /outputpath:"D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\MolesAssemblies" /clrversion:v4.0.30319 /targetframeworkversion:v4.0
1 ответ
Итак, сегодня я еще раз взглянул на это, и мне кажется, что я придумал проблему, и это было удручающе просто.
Я использовал родинки в 2 разных тестовых проектах, и в одном из них я указал, какие именно классы я хотел, чтобы родинки использовались. assembly.moles
XML-файл. Этот, должно быть, был скомпилирован после того, как был сделан основной объем моих тестов, поэтому он перезаписал его в каталоге Binaries.
Я удалил подробности из этого файла, и теперь похоже, что мои тесты проходят успешно и создаются типы MXXX.