Skip to content

Commit 290e874

Browse files
committed
Merge pull request #128 from JakeGinnivan/StepExecutionWithErrors
Step execution with errors
2 parents 5dc3ec9 + 594ee4d commit 290e874

2 files changed

Lines changed: 45 additions & 2 deletions

File tree

TestStack.BDDfy.Tests/Scanner/FluentScanner/ComplexStepsTests.cs

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1-
using NUnit.Framework;
1+
using System;
2+
using System.Linq;
3+
using NUnit.Framework;
24
using Shouldly;
5+
using TestStack.BDDfy.Tests.Configuration;
36

47
namespace TestStack.BDDfy.Tests.Scanner.FluentScanner
58
{
@@ -19,5 +22,34 @@ public void ShouldBeAbleToChainComplexTestWithFluentApi()
1922
.And(() => count++.ShouldBe(4), "And we should still be able to use ands")
2023
.BDDfy();
2124
}
25+
26+
[Test]
27+
public void ShouldContinueExecutingThensButStopWhenNextNotAssertStepIsHit()
28+
{
29+
var testRun = new TestRunnerTests.ScenarioWithFailingThen()
30+
.Given(x => x.PassingGiven())
31+
.When(x => x.PassingWhen())
32+
.Then(x => x.FailingThen())
33+
.And(x => x.PassingAndThen())
34+
.When(x => x.PassingWhen())
35+
.LazyBDDfy();
36+
37+
Assert.Throws<Exception>(() => testRun.Run());
38+
var scenario = testRun.Story.Scenarios.First();
39+
Assert.AreEqual(Result.Failed, scenario.Result);
40+
var steps = scenario.Steps;
41+
42+
Assert.AreEqual(5, steps.Count);
43+
Assert.AreEqual(Result.Passed, steps[0].Result);
44+
Assert.AreEqual(ExecutionOrder.SetupState, steps[0].ExecutionOrder);
45+
Assert.AreEqual(Result.Passed, steps[1].Result);
46+
Assert.AreEqual(ExecutionOrder.Transition, steps[1].ExecutionOrder);
47+
Assert.AreEqual(Result.Failed, steps[2].Result);
48+
Assert.AreEqual(ExecutionOrder.Assertion, steps[2].ExecutionOrder);
49+
Assert.AreEqual(Result.Passed, steps[3].Result);
50+
Assert.AreEqual(ExecutionOrder.ConsecutiveAssertion, steps[3].ExecutionOrder);
51+
Assert.AreEqual(Result.NotExecuted, steps[4].Result);
52+
Assert.AreEqual(ExecutionOrder.Transition, steps[4].ExecutionOrder);
53+
}
2254
}
2355
}

TestStack.BDDfy/Processors/TestRunner.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,19 @@ public void Process(Story story)
1616
var executor = new ScenarioExecutor(scenario);
1717
executor.InitializeScenario();
1818

19+
var stepFailed = false;
1920
foreach (var executionStep in scenario.Steps)
2021
{
22+
if (stepFailed && ShouldExecuteStepWhenPreviousStepFailed(executionStep))
23+
break;
24+
2125
if (executor.ExecuteStep(executionStep) == Result.Passed)
2226
continue;
2327

24-
if (Configuration.Configurator.Processors.TestRunner.StopExecutionOnFailingThen || !executionStep.Asserts)
28+
if (!executionStep.Asserts)
2529
break;
30+
31+
stepFailed = true;
2632
}
2733

2834
if (scenario.Example != null)
@@ -32,5 +38,10 @@ public void Process(Story story)
3238
}
3339
}
3440
}
41+
42+
private static bool ShouldExecuteStepWhenPreviousStepFailed(Step executionStep)
43+
{
44+
return Configuration.Configurator.Processors.TestRunner.StopExecutionOnFailingThen || !executionStep.Asserts;
45+
}
3546
}
3647
}

0 commit comments

Comments
 (0)