2008-09-30 41 views
0

我無法讓Team Build執行我的MbUnit單元測試。我試圖編輯TFSBuild.proj並添加了以下部分:如何獲得Team Build以運行MbUnit測試?

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

但是我還沒有得到測試運行。

回答

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

MSBuild中ItemGroups的工作方式是在運行任何目標之前,在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> 

希望幫助,祝你好運。

Martin。

1

您不需要再打電話來的MSBuild讓你的ItemGroup被填充,有一個更簡單的方法。重新調用MSBuild有其不利之處,例如傳遞所有Teambuild參數以使TeamBuild任務正常工作。我們使用MSBuild的CreateItem任務來動態生成帶有我們所有測試DLL的ItemGroup:

<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 --> 
相關問題