我的应用程序有几个单元测试项目。所有其他项目和单元测试项目都构建到一个公共输出目录中。通过 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.dll 并使用 Test Runner 执行这些。