Frage

Ich habe Probleme bekommen Team Build meine MbUnit Unit-Tests durchzuführen. Ich habe versucht, TFSBuild.proj und hinzugefügt, um die folgenden Teile zu bearbeiten:

<Project ...>
  <UsingTask TaskName="MbUnit.MSBuild.Tasks.MbUnit" AssemblyFile="path_to_MbUnit.MSBuild.Tasks.dll" />
  ...
  ...
  <ItemGroup>
    <TestAssemblies Include="$(OutDir)\Project1.dll" />
    <TestAssemblies Include="$(OutDir)\Project2.dll" />
  </ItemGroup>
  <Target Name="Tests">
    <MbUnit
      Assemblies="@(TestAssemblies)"
      ReportTypes="html"
      ReportFileNameFormat="buildreport{0}{1}"
      ReportOutputDirectory="." />
  </Target>
  ...
</Project>

Aber ich habe noch die Tests zu bekommen auszuführen.

War es hilfreich?

Lösung

Vor Vorschlag half mir nicht viel, aber ich fand eine Dokumentation zu Team beim Aufbau und angepasst meinen Build-Skript des AfterCompile Ziel außer Kraft zu setzen:

(EDIT: Nun, da ich ein besseres Verständnis des Teams haben beim Aufbau habe ich einige mehr auf die Probe Läufer hinzugefügt Es wird nun die Build-Explorer / Build-Monitor mit eingebautem Schritte mit Details über den Testlauf aktualisieren.)

<Project ...>
  <UsingTask TaskName="MbUnit.MSBuild.Tasks.MbUnit" AssemblyFile="path_to_MbUnit.MSBuild.Tasks.dll" />
  ...
  ...
  <Target Name="AfterCompile">
    <ItemGroup>
      <TestAssemblies Include="$(OutDir)\Project1.dll" />
      <TestAssemblies Include="$(OutDir)\Project2.dll" />
    </ItemGroup>

    <BuildStep
      TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
      BuildUri="$(BuildUri)"
      Message="Running tests (cross your fingers)...">
      <Output TaskParameter="Id" PropertyName="StepId" />
    </BuildStep>

    <MbUnit
      Assemblies="@(TestAssemblies)"
      ReportTypes="html"
      ReportFileNameFormat="buildreport{0}{1}"
      ReportOutputDirectory="." />

    <BuildStep
      TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
      BuildUri="$(BuildUri)"
      Id="$(StepId)"
      Message="Yay! All tests succeded!"
      Status="Succeeded" />
    <OnError ExecuteTargets="MarkBuildStepAsFailed" />
  </Target>

  <Target Name="MarkBuildStepAsFailed">
    <BuildStep
      TeamFoundationServerUrl="$(TeamFoundationServerUrl)"
      BuildUri="$(BuildUri)"
      Id="$(StepId)"
      Message="Oh no! Some tests have failed. See test report in drop folder for details."
      Status="Failed" />
  </Target>
  ...
</Project>

Andere Tipps

Sie brauchen nicht MSBuild zu rufen wieder Ihre ItemGroup bevölkert zu haben, gibt es einen einfacheren Weg. Re-Aufruf MSBuild seine Schattenseiten hat, wie vorbei all Teambuild-Parameter auf Teambuild-Aufgaben Arbeit zu machen. Wir verwenden die CreateItem Aufgabe von MSBuild dynamisch eine ItemGroup mit all unserem Test-DLLs zu erzeugen:

<Target Name="AfterCompile">
<CreateItem Include="$(OutDir)\*.Test.dll">
           <Output
               TaskParameter="Include"
               ItemName="TestBinaries"/>
</CreateItem>
</Target><!--Test run happens in a later target in our case, we use MSTest -->

Die Art und Weise ItemGroups in MSBuild Arbeit ist, dass sie ganz am Anfang der MSBuild Scripts ausgewertet werden, bevor irgendwelche Ziele liefen werden. Deshalb, wenn die Baugruppen noch nicht vorhanden ist (was sie nicht, weil sie noch nicht gebaut), dann die ItemGroups keine Dateien finden.

Die in MSBuild üblichen Muster, dies zu umgehen ist MSBuild wieder ruft wieder an dieser Stelle, so dass, wenn die Artikelgruppen in der Innen MSBuild Ausführung ausgewertet zu bekommen, werden die Baugruppen vorhanden sein.

Zum Beispiel so etwas wie:

  <PropertyGroup>
    <TestDependsOn>
      $(TestDependsOn);
      CallMbUnitTests;
    </TestDependsOn>
  </PropertyGroup>

  <Target Name="CallMbUnitTests">
    <MSBuild Projects="$(MSBuildProjectFile)"
             Properties="BuildAgentName=$(BuildAgentName);BuildAgentUri=$(BuildAgentUri);BuildDefinitionName=$(BuildDefinitionName);BuildDefinitionUri=$(BuildDefinitionUri);
                         BuildDirectory=$(BuildDirectory);BuildNumber=$(BuildNumber);CompilationStatus=$(CompilationStatus);CompilationSuccess=$(CompilationSuccess);
                         ConfigurationFolderUri=$(ConfigurationFolderUri);DropLocation=$(DropLocation);
                         FullLabelName=$(FullLabelName);LastChangedBy=$(LastChangedBy);LastChangedOn=$(LastChangedOn);LogLocation=$(LogLocation);
                         MachineName=$(MachineName);MaxProcesses=$(MaxProcesses);Port=$(Port);Quality=$(Quality);Reason=$(Reason);RequestedBy=$(RequestedBy);RequestedFor=$(RequestedFor);
                         SourceGetVersion=$(SourceGetVersion);StartTime=$(StartTime);Status=$(Status);TeamProject=$(TeamProject);TestStatus=$(TestStatus);
                         TestSuccess=$(TestSuccess);WorkspaceName=$(WorkspaceName);WorkspaceOwner=$(WorkspaceOwner);
                         SolutionRoot=$(SolutionRoot);BinariesRoot=$(BinariesRoot);TestResultsRoot=$(TestResultsRoot)"
             Targets="RunMbUnitTests"/>
  </Target>

  <ItemGroup>
    <TestAssemblies Include="$(OutDir)\Project1.dll" />
    <TestAssemblies Include="$(OutDir)\Project2.dll" />
  </ItemGroup>
  <Target Name="RunMbUnitTests">
    <MbUnit
      Assemblies="@(TestAssemblies)"
      ReportTypes="html"
      ReportFileNameFormat="buildreport{0}{1}"
      ReportOutputDirectory="." />
  </Target>

Ich hoffe, das, viel Glück hilft.

Martin.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top