예제 #1
0
        public void Execute(Scenario scenario, IEnumerable <IStep> steps)
        {
            _progressNotifier.NotifyScenarioStart(scenario.Name, scenario.Label);
            var stepsToExecute = PrepareSteps(scenario, steps);

            var watch             = new Stopwatch();
            var scenarioStartTime = DateTimeOffset.UtcNow;

            try
            {
                ExecutionContext.Instance = new ExecutionContext(_progressNotifier, stepsToExecute.Length);
                watch.Start();
                ExecuteSteps(stepsToExecute);
            }
            finally
            {
                watch.Stop();
                ExecutionContext.Instance = null;
                var result = new ScenarioResult(scenario.Name, stepsToExecute.Select(s => s.GetResult()), scenario.Label, scenario.Categories)
                             .SetExecutionStart(scenarioStartTime)
                             .SetExecutionTime(watch.Elapsed);

                if (ScenarioExecuted != null)
                {
                    ScenarioExecuted.Invoke(result);
                }

                _progressNotifier.NotifyScenarioFinished(result);
            }
        }
        public void NotifyScenarioFinished_should_print_scenario_result(ResultStatus status)
        {
            var    executionTime = new TimeSpan(0, 0, 27);
            string expectedText  = string.Format("  SCENARIO RESULT: {0} after {1}{2}", status, executionTime.FormatPretty(), Environment.NewLine);

            var result = MockRepository.GenerateMock <IScenarioResult>();

            result.Stub(r => r.Status).Return(status);
            result.Stub(r => r.ExecutionTime).Return(executionTime);

            _subject.NotifyScenarioFinished(result);
            Assert.That(_console.GetCapturedText(), Is.EqualTo(expectedText));
        }