0

Team Build で MbUnit 単体テストを実行するのに問題があります。TFSBuild.proj を編集して、次の部分を追加しようとしました。

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

しかし、まだテストを実行する必要があります。

4

3 に答える 3

1

上記の提案はあまり役に立ちませんでしたが、チーム ビルドのドキュメントを見つけ、ビルド スクリプトを調整して AfterCompile ターゲットをオーバーライドしました。

(編集: チーム ビルドの理解が深まったので、テスト ランナーにさらに追加しました。これにより、ビルド エクスプローラー/ビルド モニターが更新され、ビルド ステップがテスト実行の詳細とともに更新されます)

<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>
于 2008-10-01T11:06:38.400 に答える
0

MSBuild での ItemGroup の動作方法は、ターゲットが実行される前に、MSBuild スクリプトの開始時に評価されることです。したがって、アセンブリがまだ存在しない場合 (まだビルドされていないため存在しません)、ItemGroups はファイルを見つけられません。

これを回避するための MSBuild の通常のパターンは、この時点で再度 MSBuild を呼び出して、内部の MSBuild 実行で項目グループが評価されるときにアセンブリが存在するようにすることです。

たとえば、次のようなものです。

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

お役に立てば幸いです、頑張ってください。

マーティン。

于 2008-09-30T20:14:17.173 に答える