vstest.console抛出System.IO.FileNotFoundException

时间:2014-10-10 11:58:33

标签: unit-testing vstest

我的应用程序有几个单元测试项目。所有其他项目和单元测试项目都构建到一个公共输出目录。使用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正在复制测试组件并将组件依赖于" out" " testresults"中的目录目录。但是,并非所有需要的程序集都由项目引用,而是手动复制到公共输出目录。这些组件在" out"目录在" testresults"并导致System.IO.FileNotFoundException。

使用MSTest,我可以通过添加DeploymentItem将配置文件指向公共输出目录。对于vstest.console,这不再适用了。

我可以做些什么来解决这种行为?我不想和" out"目录。从公共输出目录运行我的单元测试就好了。

PS。我在TFS 2013上遇到了与构建定义相同的问题。我的构建定义是收集* .unittest.dlls并使用Test Runner执行这些。

1 个答案:

答案 0 :(得分:1)

解决方案是使用.runsettings文件。在runsettings文件中,可以指定“DeploymentEnabled”。默认情况下这是真的。将其更改为false不会将所有程序集复制到TestResults目录的out目录。有关runsettings文件的更多信息: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>