13

Ist es möglich, Wildcard-Testcontainer-Werte an die Befehlszeile mstest.exe zu übergeben, anstatt mehrere Testcontainer-Werte manuell fest zu codieren? WiePlatzhalter Testcontainer zu Mstest. exe

MSTest.exe/testcontainer: Tests DLL

Ich wollte zu laufen Tests manuell aufrufen mstest in unserer TFS 2012 Upgrade template.xaml zu bauen processso tthat es wie eine automatische Erkennung ähnlich verhält in Standard template.xaml

Wenn das nicht in eine Fledermaus-Skript-Schleife durch die Ordner von einem gegebenen Startordner geschrieben werden könnte?

Antwort

24

MSTest nimmt keinen Wildcard-Parameter für den Testcontainer (look here for a reference on the command line options). Es kann jedoch mehrere/testcontainer Argumente, wie folgt:

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

Sie müssen diese Parameter auf andere Weise liefern. Dies kann mit Hilfe einer Batch-Datei erfolgen, aber MSBuild kann eine bessere Wahl für diese sein:

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

(mit Dank an https://stackoverflow.com/a/2770682/62662 für die Transformation)

Speicher i in eine Datei (testall.proj) und Lauf es mit MSBuild testall.proj, oder erstellen Sie eine Batch-Datei, um es für Sie auszuführen.

Beachten Sie auch, dass mstest lädt alle testcontainers in einer Anwendungsdomäne geliefert, so dass sie die gleiche Plattform Ziel (jede CPU, x86, x64) unterstützen müssen.

+0

ich das denken könnte einfacher gemacht Transformations werden, indem man einfach die Identität Grabbing Eigenschaft jeder Versammlung. Ich hatte auch ein Problem mit Pfaden (Test-DLLs sind nicht direkt unter dem, wo meine Zieldatei gespeichert ist), und das löste auch dieses Problem.

3

Es ist auch möglich, cmd-Datei zu verwenden Behälter in einer einzigen Variablen durch Platzhalter zu sammeln, und dann mstest erweitert mit dieser Variablen laufen:

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% 
+1

Gibt es eine maximale Länge der Befehlszeile? Wenn es Hunderte von Test-DLLs gibt, würde es dann noch funktionieren? –