通配符测试容器到mstest。可执行程序

时间:2012-12-02 12:04:51

标签: visual-studio-2012 tfs mstest tfsbuild vs-unit-testing-framework

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

Mstest.exe /testcontainer:尝试.dll

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

如果没有,可以将其写入bat脚本以循环显示给定开始文件夹中的文件夹吗?

2 个答案:

答案 0 :(得分:28)

MSTest不为测试容器(look here for a reference on the command line options)提供通配符参数。但是它可以采用多个/ 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进行转换)

将我保存到文件(testall.proj),然后使用MSBuild testall.proj运行,或创建批处理文件以便为您运行。

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

答案 1 :(得分: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%