public virtual void Step(StepDefinitionKeyword stepDefinitionKeyword, string keyword, string text, string multilineTextArg, Table tableArg) { StepDefinitionType stepDefinitionType = stepDefinitionKeyword == StepDefinitionKeyword.And || stepDefinitionKeyword == StepDefinitionKeyword.But ? GetCurrentBindingType() : (StepDefinitionType)stepDefinitionKeyword; _contextManager.InitializeStepContext(new StepInfo(stepDefinitionType, text, tableArg, multilineTextArg)); try { var stepInstance = new StepInstance(stepDefinitionType, stepDefinitionKeyword, keyword, text, multilineTextArg, tableArg, _contextManager.GetStepContext()); ExecuteStep(_contextManager, stepInstance); } finally { _contextManager.CleanupStepContext(); } }
public virtual void Step(StepDefinitionKeyword stepDefinitionKeyword, string keyword, string text, string multilineTextArg, Table tableArg) { StepDefinitionType stepDefinitionType = stepDefinitionKeyword == StepDefinitionKeyword.And || stepDefinitionKeyword == StepDefinitionKeyword.But ? GetCurrentBindingType() : (StepDefinitionType)stepDefinitionKeyword; _contextManager.InitializeStepContext(new StepInfo(stepDefinitionType, text, tableArg, multilineTextArg)); _testThreadExecutionEventPublisher.PublishEvent(new StepStartedEvent(FeatureContext, ScenarioContext, _contextManager.StepContext)); try { var stepInstance = new StepInstance(stepDefinitionType, stepDefinitionKeyword, keyword, text, multilineTextArg, tableArg, _contextManager.GetStepContext()); ExecuteStep(_contextManager, stepInstance); } finally { _testThreadExecutionEventPublisher.PublishEvent(new StepFinishedEvent(FeatureContext, ScenarioContext, _contextManager.StepContext)); _contextManager.CleanupStepContext(); } }
private void ExecuteStep(StepInstance stepInstance) { HandleBlockSwitch(stepInstance.StepDefinitionType.ToScenarioBlock()); testTracer.TraceStep(stepInstance, true); bool isStepSkipped = contextManager.ScenarioContext.TestStatus != TestStatus.OK; BindingMatch match = null; object[] arguments = null; try { match = GetStepMatch(stepInstance); arguments = GetExecuteArguments(match); if (isStepSkipped) { testTracer.TraceStepSkipped(); } else { OnStepStart(); TimeSpan duration = ExecuteStepMatch(match, arguments); if (runtimeConfiguration.TraceSuccessfulSteps) { testTracer.TraceStepDone(match, arguments, duration); } } } catch (PendingStepException) { Debug.Assert(match != null); Debug.Assert(arguments != null); testTracer.TraceStepPending(match, arguments); contextManager.ScenarioContext.PendingSteps.Add( stepFormatter.GetMatchText(match, arguments)); if (contextManager.ScenarioContext.TestStatus < TestStatus.StepDefinitionPending) { contextManager.ScenarioContext.TestStatus = TestStatus.StepDefinitionPending; } } catch (MissingStepDefinitionException) { if (contextManager.ScenarioContext.TestStatus < TestStatus.MissingStepDefinition) { contextManager.ScenarioContext.TestStatus = TestStatus.MissingStepDefinition; } } catch (BindingException ex) { testTracer.TraceBindingError(ex); if (contextManager.ScenarioContext.TestStatus < TestStatus.BindingError) { contextManager.ScenarioContext.TestStatus = TestStatus.BindingError; contextManager.ScenarioContext.TestError = ex; } } catch (Exception ex) { testTracer.TraceError(ex); if (contextManager.ScenarioContext.TestStatus < TestStatus.TestError) { contextManager.ScenarioContext.TestStatus = TestStatus.TestError; contextManager.ScenarioContext.TestError = ex; } if (runtimeConfiguration.StopAtFirstError) { throw; } } finally { if (!isStepSkipped) { OnStepEnd(); } contextManager.CleanupStepContext(); } }