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