我的应用程序有几个单元测试项目。所有其他项目和单元测试项目都构建到一个公共输出目录中。使用msbuild任务,我收集所有单元测试程序集并运行vstest.console.exe来测试这些程序集。
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\..\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "Assembly1.UnitTest.dll" "Assembly2.UnitTest.dll" /Platform:x64 /Framework:Framework40 /InIsolation /Logger:trx这导致异常: System.IO.FileNotFoundException:无法加载文件或程序集“someassembly.dll”或其依赖项之一。找不到指定的模块。
当我为单个单元测试程序集执行vstest.console.exe时,不会出现上述异常。进一步的调查了解到,当同时测试多个程序集时,vstest.console将测试程序集和依赖程序集复制到"testresults“目录中的"out”目录中。但是,并非所有需要的程序集都由项目引用,而是手动复制到公共输出目录。这些程序集丢失在"testresults“中的"out”目录中,并导致System.IO.FileNotFoundException。
使用MSTest,我可以通过添加一个DeploymentItem来使用一个配置文件,指向公共输出目录。对于vstest.console来说,这已经行不通了。
我能做些什么来避免这种行为?我不想使用"out“目录。从公共输出目录运行我的单元测试是很好的。
PS。我也有关于TFS 2013构建定义的相同问题。我的构建定义正在收集*.unittest.dlls并使用Test执行这些定义。
发布于 2014-10-15 07:57:46
解决方案是使用.runsettings文件。在运行设置文件中,可以指定"DeploymentEnabled“。默认情况下,这是正确的。将其更改为false并不会将所有程序集复制到TestResults目录的out目录。运行设置文件的更多信息:http://msdn.microsoft.com/en-us/library/jj635153.aspx。
示例:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!--Info: http://msdn.microsoft.com/en-us/library/jj635153.aspx -->
<MSTest>
<IgnoreTestImpact>True</IgnoreTestImpact>
<MapInconclusiveToFailed>True</MapInconclusiveToFailed>
<CaptureTraceOutput>False</CaptureTraceOutput>
<DeleteDeploymentDirectoryAfterTestRunIsComplete>True</DeleteDeploymentDirectoryAfterTestRunIsComplete>
<DeploymentEnabled>False</DeploymentEnabled>
</MSTest>
</RunSettings>https://stackoverflow.com/questions/26298930
复制相似问题