ScenarioResult ExecuteScenario(Scenario scenario, Feature feature, IEnumerable <FoundMatch> matches, Dictionary <Type, ActionStepsObjectHolder> executionObjects, RunnerOptions options)
        {
            var scenarioResult = new ScenarioResult(scenario.Headline);

            foreach (var step in feature.BackgroundSteps.Concat(scenario.Steps))
            {
                BeforeStep(scenario, feature, step, executionObjects);
                var result = ExecuteStep(step, matches, executionObjects, options);
                scenarioResult.AddStepResult(result);
                AfterStep(scenario, feature, step, result, executionObjects);

                if (options.SuccessRequired && !result.Success)
                {
                    break;
                }
            }

            return(scenarioResult);
        }