05 October 2010 HowTo, MSBuild, MSTest Robert Muehsig

imageAngelehnt an meinen letztes "HowTo: Mit MSBuild Solutions bauen” zeig ich hier in einem kurzen Beispiel wie man MSTests aufrufen kann. Für die NUnit User: Wenn am die Vorgehensweise verstanden hat, kann man auch jedes andere Tool über MSBuild aufrufen ;)

Szenario

Der Aufbau ist genau so, wie bei dem letzten Blogpost. Als kleine Erweiterung hab ich noch ein zusätzliches Test Projekt erstellt:

image

Meine BuildSolutions.target Datei, welches mein MSBuild Script enthält, hab ich noch um ein "RunTests” Target erweitert:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">
   <PropertyGroup>
		<OutDir>$(MSBuildStartupDirectory)\OutDir\</OutDir>
		<SolutionProperties>
					OutDir=$(OutDir);
					Platform=Any CPU;
					Configuration=Release
		</SolutionProperties>
   </PropertyGroup>
	<ItemGroup>
		<Solution Include="..\MsBuildSample.sln">
			<Properties>
							$(SolutionProperties)
			</Properties>
		</Solution>
	</ItemGroup>
	<Target Name="Build">
		<MSBuild Projects="@(Solution)"/>
	</Target>
	<Target Name="RunTests">
		<Exec Command='"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe" /testcontainer:"$(MSBuildStartupDirectory)\OutDir\MsBuildSample.WebApp.Tests.dll" /testcontainer:"$(MSBuildStartupDirectory)\OutDir\AnotherTestProject.dll"' />
	</Target>
</Project>

Über das MSBuild Command "Exec” ruf ich die MSTest.exe mit den entsprechenden Parametern auf. In diesem Fall der "testcontainer”. Da ich zwei Testprojekte habe, welche beide mit in das OutDir als Assembly landen, habe ich auch zwei testcontainer definiert. Ich könnte hier auch noch x-andere Tests dran hängen.

Der Aufruf des Scripts

Um den Aufruf etwas zu vereinfachen, habe ich dies in einer .bat Datei wieder gespeichert:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe Buildsolution.targets /t:Build,RunTests

Über den "t” Parameter kann ich bestimmen, welche Targets aufgerufen werden. Erst ruf ich "Build”, dann "RunTests” auf. In dem Consolen Output seh ich auch die wesentlichen Sachen:

image

Geht auch mit X-anderen Tools

Wenn man die Grundzüge von MSBuild verstanden hat, dann kann man alles, was irgendwie über die CMD ansprechbar ist auch aufrufen. Bei der MSTest Sache muss ich mir nur noch überlegen, wie ich die Tests besser in das Buildfile hinterlegen kann. Bei vielen Tests verliert man bei so einer Zeile schon den Überblick:

<Exec Command='"C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\mstest.exe" /testcontainer:"$(MSBuildStartupDirectory)\OutDir\MsBuildSample.WebApp.Tests.dll" /testcontainer:"$(MSBuildStartupDirectory)\OutDir\AnotherTestProject.dll"' />

Vielleicht hat ja jemand hier eine gute Idee ;)

Der Blogpost beschreibt keine Raketenwissenschaft, aber ich musste Google anwerfen, daher hab ich das mal hier kurz zusammengeschrieben :)

[ Download Democode ]


Written by Robert Muehsig

Software Developer - from Dresden, Germany, now living & working in Switzerland. Microsoft MVP & Web Geek.
Other Projects: KnowYourStack.com | ExpensiveMeeting | EinKofferVollerReisen.de

If you like the content and want to support me you could buy me a beer or a coffee via Litecoin or Bitcoin - thanks for reading!