无论测试目标是成功还是失败(如C#/ Java中的try...finally构造),如何在“Test”目标运行后运行某个清理任务。
答案 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>
在错误案例中调用目标,并DependsOnTargets
或CallTarget
在正常情况下调用同一目标。