我们正在使用Moles测试一些遗留代码。目前,当使用MSTest或Resharper的测试运行器在本地运行时,所有单元测试都会通过。但是,当在构建服务器上运行时(我们使用稍微修改过的TFS 2010工作流程,使用MSBuild和MSTest),我们所有的Moles测试都会失败。
当我查看原因时,因为在构建服务器上生成.Moles.dll时,只创建了Stubs(前缀为“S”的类),但没有创建Moles类(前缀为“M”的类) “)。
我们的代码仍在编译,因为我们的一位开发人员创建了一个简化语法的Moles框架,它使用Expressions和Delegates使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
答案 0 :(得分:0)
所以,今天我又看了一眼这个问题,我想我想出了这个问题,这简直令人沮丧。
我在两个不同的测试项目中使用了moles,在其中一个测试项目中我确切地指定了哪些类我想要使用assembly.moles
xml文件的moles。这个必须在我的大量测试之后编译,因此它在Binaries目录中覆盖它。
我从该文件中删除了详细信息,现在看起来我的测试正在通过,并且正在创建MXXX类型。