1

我想创建一个 VSTS 构建定义,我可以在其中指定 vstest.console.exe 在包含单词test的任何 dll 上执行。这个定义是:

**\*test*.dll;-:**\obj\**

这将为我的存储库执行如下命令:

2016-04-08T20:38:41.4966824Z Executing C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe 
"E:\A\_work\33\s\A\UnitTests\bin\Release\A.UnitTests.dll" 
"E:\A\_work\33\s\A\bin\Release\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll" 
"E:\A\_work\33\s\B\UnitTests\bin\Release\B.UnitTests.dll" 
"E:\A\_work\33\s\B\UnitTests\bin\Release\Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll" 
/logger:trx

我遇到的问题是 dll 的 A 和 B 依赖于相同的 dll 名称但不同的版本,这意味着 vstest.console.exe 不能同时加载 dll 并且这两种情况之一必然会失败。

有没有办法强制 vstest.console.exe 为每个 dll 单独加载?我试过 /InInsolation 但它没有解决问题

我知道通过不同的 vstest.console.exe 命令分别执行每个 dll 是可行的,但这在 VSTS 中实现起来很麻烦。我还有其他选择吗?

4

1 回答 1

1

您可以尝试使用“并行运行”功能。检查“Visual Studio 测试”步骤中的“并行运行”选项或使用测试设置文件启用它。

并行测试执行

Visual Studio 测试平台引入了对测试用例的并行执行支持。

并行测试执行利用机器上的可用内核,并通过在每个可用内核上作为不同进程启动测试执行引擎并将其交给容器(程序集、DLL 或包含要执行的测试的相关工件)来实现,值得要执行的测试。调度的单位是测试容器。在每个容器中,测试将根据测试框架的语义执行。如果有很多这样的容器,那么当进程完成在一个容器中执行测试时,它们会被交给下一个可用的容器。

有关详细信息,请参阅此链接:并行测试执行

但是,在我看来,最简单的方法是在构建定义中添加一个额外的“Visual Studio 测试”步骤。然后你可以配置一个 VSTest 任务来执行 A.UnitTests.dll 和另一个 VSTest 任务来执行 B.UnitTests.dll。

于 2016-04-11T07:23:34.737 回答