15

是否可以将通配符 testcontainer 值传递给命令行 mstest.exe 而不是手动硬编码多个 testcontainer 值?如

Mstest.exe /testcontainer:测试.dll

我想在我们的 tfs 2012 升级 template.xaml 构建过程中手动调用 mstest 所以它的行为类似于在默认 template.xaml 中运行测试的自动发现方式

如果不能,是否可以将其写入 bat 脚本以遍历给定起始文件夹中的文件夹?

4

2 回答 2

29

MSTest测试容器不采用通配符参数(在此处查找有关命令行选项的参考)。但是,它可以采用多个 /testcontainer 参数,如下所示:

mstest.exe /testcontainer:a.test.dll /testcontainer:b.tests.dll

您将不得不以另一种方式提供这些参数。这可以使用批处理文件来完成,但MSBuild可能是更好的选择:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="RunMSTest">

<ItemGroup>
    <TestAssemblies Include="**\*Tests.dll"/>
</ItemGroup>

<Target Name="RunMSTest">
    <Exec Condition=" '@(TestAssemblies)' != ''"
          Command="Mstest.exe @(TestAssemblies ->'/testcontainer:&quot;%(RecursiveDir)%(Filename)%(Extension)&quot;', ' ')"
          />
</Target>

</Project>

(感谢https://stackoverflow.com/a/2770682/62662的转换)

将 i 保存到文件 ( testall.proj),然后使用 运行它MSBuild testall.proj,或者创建一个批处理文件来为您运行它。

另请注意,mstest 在一个应用程序域中加载所有提供的测试容器,因此它们需要支持相同的平台目标(任何 cpu、x86、x64)。

于 2012-12-11T23:28:01.947 回答
3

也可以使用 cmd 文件通过通配符将容器收集到单个变量中,然后在扩展此变量的情况下运行 mstest:

call "%VS100COMNTOOLS%vsvars32"
@setlocal enabledelayedexpansion enableextensions
@set list=
@for %%x in (.\Bin\Debug\*Test.dll) do set list=!list! /testcontainer:%%x
@set list=%list:~1%

mstest %list%
于 2013-04-11T13:51:05.430 回答