2010-11-22 108 views
2

我已經編寫了一些定製邏輯,以便將NUnit測試轉換爲TFS構建。除非測試不通過構建部分成功而不是失敗,否則這一切都工作得很好。任何人都知道我可以告訴它失敗?定製邏輯運行後無法使TFS構建失敗

這裏就是我想:

<BuildStep Message="Integration Tests Passed" 
    Condition="$(TestsResult) == 'True'" 
    TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
    BuildUri="$(BuildUri)" 
    Id="$(IntegrationTestsStepId)" 
    Status="Succeeded" /> 
<BuildStep Message="Integration Tests FAILED" 
    Condition="$(TestsResult) != 'True'" 
    TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
    BuildUri="$(BuildUri)" 
    Id="$(IntegrationTestsStepId)" 
    Status="Failed" 
    CompilationStatus="Failed" 
    TestStatus="Failed"/> 
<!-- If NUnit failed it's time to error out --> 
<Error Condition="$(TestsResult) != 'True'" Text="Unit Tests Failed" /> 

回答

2

這是<SetBuildProperties>那是魔術:

<SetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
         BuildUri="$(BuildUri)" 
         CompilationStatus="Failed" 
         TestStatus="Failed" 
         Condition="'$(TestsResult)' != 'True'"> 
</SetBuildProperties> 


<Error Condition="'$(TestsResult)'!='True'" Text="Smoke Tests Failed" /> 
<SetBuildProperties TeamFoundationServerUrl="$(TeamFoundationServerUrl)" 
         BuildUri="$(BuildUri)" 
         CompilationStatus="Succeeded" 
         TestStatus="Succeeded" 
         Condition="'$(TestsResult)' != 'False'"> 
</SetBuildProperties> 

我認爲它歸結爲不需要發送的CompilationStatusTestStatus

1

這是團隊建設的單元測試的默認行爲。我們使用MStest而不是nUnit,所以這可能無法正常工作,但是您設置了$(TestResult),所以它應該可以。如果您在構建服務器上安裝VS2008 SP1中,你可以添加以下行到您的TfsBuild.proj(在附加屬性部分),它應該構建失敗

<TreatTestFailureAsBuildFailure>true</TreatTestFailureAsBuildFailure>

+0

不幸的是,我們沒有在我們的盒子上安裝SP1,因此該屬性對我們不起作用。最後,我們不得不解決部分失敗。 – Helephant 2011-03-04 15:12:06