Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在我的构建服务器上,我只得到存根,而不是鼹鼠_.net_Tfs_Mstest_Moles - Fatal编程技术网

.net 在我的构建服务器上,我只得到存根,而不是鼹鼠

.net 在我的构建服务器上,我只得到存根,而不是鼹鼠,.net,tfs,mstest,moles,.net,Tfs,Mstest,Moles,我们正在使用Moles测试一些遗留代码。目前,当使用MSTest或Resharper的测试运行程序在本地运行时,我们所有的单元测试都通过了。但是,当在构建服务器上运行时(我们使用稍加修改的TFS 2010工作流,使用MSBuild和MSTest),所有Moles测试都会失败 当我调查原因时,是因为在构建服务器上生成.Moles.dll时,只创建了存根(以“S”为前缀的类),而没有创建Moles类(以“M”为前缀的类) 我们的代码仍然可以编译,因为我们的一位开发人员为Moles创建了一个框架来简化

我们正在使用Moles测试一些遗留代码。目前,当使用MSTest或Resharper的测试运行程序在本地运行时,我们所有的单元测试都通过了。但是,当在构建服务器上运行时(我们使用稍加修改的TFS 2010工作流,使用MSBuild和MSTest),所有Moles测试都会失败

当我调查原因时,是因为在构建服务器上生成.Moles.dll时,只创建了存根(以“S”为前缀的类),而没有创建Moles类(以“M”为前缀的类)

我们的代码仍然可以编译,因为我们的一位开发人员为Moles创建了一个框架来简化语法,该框架使用表达式和委托使与Moles一起工作感觉就像与Moq一起工作一样。框架使用反射来获取方法的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/MolesFileOnly/ReferenceAssembly:“/cachepath:”C:\Program Files(x86)\Microsoft moles\bin\..\MolesAssembles”/intermediatepath:“D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\Deltanettes\obj\Debug\moles”/outputpath:“D:\Builds\4\DeltaNet\Run All Unit Tests\Sources\DeltaNet\src\DeltaNetTests\MolesAssemblies”/clrversion:v4.0.30319/targetframeworkversion:v4.0

所以,今天我又看了一眼,我想我想到了这个问题,它简单得令人沮丧

我在两个不同的测试项目中使用了moles,在其中一个项目中,我精确地指定了我想要moles使用
assembly.moles
xml文件的类。这个类必须在包含大量测试的类之后编译,因此它在Binaries目录中重写了它


我删除了该文件中的细节,现在看起来我的测试正在通过,MXXX类型正在创建中。

因此,我今天又看了一眼,我想我找到了问题所在,它非常简单

我在两个不同的测试项目中使用了moles,在其中一个项目中,我精确地指定了我想要moles使用
assembly.moles
xml文件的类。这个类必须在包含大量测试的类之后编译,因此它在Binaries目录中重写了它


我删除了该文件中的细节,现在看起来我的测试正在通过,MXXX类型正在创建。

不是基于Moles安装的M prefix类。也许你需要在TFS build server中安装,它已经安装,但我说的是我们类的Moles版本,而不是标准的.net classesI ha甚至还没有将Moles与我们的TFS构建服务器集成(仍在评估框架)但是Moles组件生成似乎没有集成到构建过程中。我认为xxx.Moles生成是一个手动步骤,通过右键单击解决方案并重新运行.mole生成。项目中没有包含MolesAssembly文件夹,因此如果它没有签入TFS,则它们将不会成为ava可在运行时使用。您是否收到关于解决方案/项目生成中缺少xxxx.Moles程序集引用的TFS生成警告?是否发出编译Moles的命令?如果是,请发布。不是直接,我只是调用调用它的MSBuild。它在开发人员和生成服务器上使用相同的解决方案文件,因此应该使用相同的参数。不是吗e M prefix类是在安装Moles的基础上构建的。也许你需要在TFS构建服务器中安装,它已经安装好了,但我说的是我们类的Moles版本,而不是标准的.net类。我还没有将Moles与我们的TFS构建服务器集成(仍在评估框架)但是Moles组件生成似乎没有集成到构建过程中。我认为xxx.Moles生成是一个手动步骤,通过右键单击解决方案并重新运行.mole生成。项目中没有包含MolesAssembly文件夹,因此如果它没有签入TFS,则它们将不会成为ava可在运行时运行。您是否收到关于解决方案/项目生成中缺少xxxx.Moles程序集引用的TFS生成警告?是否发出编译Moles的命令?如果是,请发布。不是直接发布,我只是调用调用它的MSBuild。它在开发人员和生成服务器上使用相同的解决方案文件,因此应该使用相同的参数。
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