定制逻辑运行后无法使TFS构建失败

问题描述:

我已经编写了一些定制逻辑,以便将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" /> 

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

这是团队建设的单元测试的默认行为。我们使用MStest而不是nUnit,所以这可能无法正常工作,但是您设置了$(TestResult),所以它应该可以。如果您在构建服务器上安装VS2008 SP1中,你可以添加以下行到您的TfsBuild.proj(在附加属性部分),它应该构建失败

<TreatTestFailureAsBuildFailure>true</TreatTestFailureAsBuildFailure>

+0

不幸的是,我们没有在我们的盒子上安装SP1,因此该属性对我们不起作用。最后,我们不得不解决部分失败。 – Helephant 2011-03-04 15:12:06