wildcard test containers to mstest. exe

2019-04-04 01:16发布

问题:

Is it possible to pass wildcard testcontainer values to the command-line mstest.exe rather than manually hardcoding multiple testcontainer values? Such as

Mstest.exe /testcontainer:tests.dll

I'm wanting to manually invoke mstest in our tfs 2012 upgrade template.xaml build processso tthat it behaves like a autodiscovery way similar to running tests in default template.xaml

If not could this be written into a bat script to loop through folders from a given start folder?

回答1:

MSTest doesn't take a wildcard parameter for the testcontainer (look here for a reference on the command line options). It can however take multiple /testcontainer arguments, as follows:

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

You will have to supply these parameter another way. This can be done using a batch file, but MSBuild may be a better choice for this:

<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>

(with thanks to https://stackoverflow.com/a/2770682/62662 for the transform)

Save i to a file (testall.proj), and run it with MSBuild testall.proj, or create a batch file to run it for you.

Also note that mstest loads all supplied testcontainers in one application domain, so they will need to support the same platform target (any cpu, x86, x64).



回答2:

It is also possible to use cmd file to collect containers by wildcard into a single variable, and then run mstest with this variable expanded:

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%