13

È possibile passare i valori del contenitore di caratteri jolly alla riga di comando mstest.exe invece di codificare manualmente più valori di test-test? Come ad esempiocontenitori di test jolly per il massimo. exe

MSTest.exe/testcontainer: test .dll

Sono voler richiamare manualmente mstest nei nostri TFS 2012 aggiornamento template.xaml costruire processso tthat si comporta come un modo autodiscovery simile al test in esecuzione in default template.xaml

In caso contrario, potrebbe essere scritto in uno script bat per scorrere le cartelle da una determinata cartella iniziale?

risposta

24

non accetta un parametro jolly per il contenitore dei test (look here for a reference on the command line options). Può tuttavia contenere argomenti multipli/testcontainer, come segue:

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

È necessario fornire questi parametri in un altro modo. Questo può essere fatto utilizzando un file batch, ma MSBuild può essere una scelta migliore per questo:

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

(con grazie al https://stackoverflow.com/a/2770682/62662 per la trasformazione)

Salva i per un file (testall.proj), ed eseguire con MSBuild testall.proj o crea un file batch per eseguirlo per te.

Si noti inoltre che il più semplice carica tutti i contenitori di test forniti in un dominio applicazione, quindi dovranno supportare lo stesso target di piattaforma (qualsiasi CPU, x86, x64).

+0

Credo che la trasformazione può essere resa più semplice, semplicemente afferrando l'Identità proprietà di ogni assemblea. Ho anche avuto un problema con i percorsi (le DLL di test non sono direttamente sotto il punto in cui è archiviato il mio file target), e questo ha risolto anche questo problema.

3

E 'anche possibile utilizzare il file cmd per raccogliere i contenitori da jolly in una singola variabile, e quindi eseguire mstest con questa variabile espansa:

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

c'è una lunghezza massima della riga di comando? se ci sono centinaia di DLL di test, funzionerebbe ancora? –