尝试...最终在MsBuild中等效

时间:2009-08-21 18:04:53

标签: msbuild

无论测试目标是成功还是失败(如C#/ Java中的try...finally构造),如何在“Test”目标运行后运行某个清理任务。

2 个答案:

答案 0 :(得分:13)

Target元素有一个 OnError 属性,您可以将其设置为目标,以便在出错时执行,但由于它仅在目标出错时执行,因此它只解决了一半的情况。

您是否考虑过将目标链接在一起来代表您要执行的测试“步骤”?

<PropertyGroup>
    <TestSteps>TestInitialization;Test;TestCleanup</TestSteps>
</PropertyGroup>

'TestInitialization'目标是您可以执行任何测试初始化​​的目标,'Test'目标执行测试,'TestCleanup'目标执行任何类型的测试后清理。

然后,使用 CallTarget 任务执行这些目标,使用 RunEachTargetSeparately 属性设置为 True 。这将执行所有目标,无论成功与否。

完整的样本如下:

<Project DefaultTargets = "TestRun"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

    <!-- Insert additional tests between TestInitialization and TestCleanup as necessary -->
    <PropertyGroup>
        <TestSteps>TestInitialization;Test;TestCleanup</TestSteps>
    </PropertyGroup>

   <Target Name = "TestRun">

      <CallTarget Targets="$(TestSteps)" RunEachTargetSeparately="True" />

   </Target>

    <Target Name = "TestInitialization">
        <Message Text="Executing Setup..."/>
    </Target>

    <Target Name = "Test">
        <Message Text="Executing Test..."/>

        <!-- this will fail (or should unless you meet the conditions below on your machine) -->
        <Copy 
          SourceFiles="test.xml"
          DestinationFolder="c:\output"/>
    </Target>

    <Target Name = "TestCleanup">
        <Message Text="Executing Cleanup..."/>
    </Target>

</Project>

答案 1 :(得分:0)

或者使用<OnError>在错误案例中调用目标,并DependsOnTargetsCallTarget在正常情况下调用同一目标。