На моем сервере сборки я получаю только заглушки, а не родинки - PullRequest
2 голосов
/ 09 марта 2012

Мы используем 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 Ответ

0 голосов
/ 07 сентября 2012

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

Я использовал родинки в 2 разных тестовых проектах, и в одном из них я точно указалкакие классы я хотел, чтобы кроты использовали файл assembly.moles xml.Должно быть, этот файл был скомпилирован после того, как был сделан основной объем моих тестов, и поэтому он переписал его в каталоге Binaries.

Я удалил подробности из этого файла, и теперь похоже, что мои тесты проходят и MXXXтипы создаются.

...