public async Task ScenarioOutline_Runs_Background_Steps_First()
        {
            var feature = new GherkinFeatureBuilder()
                          .WithBackground(sb => sb
                                          .Given("background", null))
                          .WithScenarioOutline("test outline", sb => sb
                                               .Given("I chose <a> as first number", null)
                                               .And("I chose <b> as second number", null)
                                               .When("I press add", null)
                                               .Then("the result should be <sum> on the screen", null),
                                               eb => eb
                                               .WithExampleHeadings("a", "b", "sum")
                                               .WithExamples("", db => db.WithData("1", "2", "3")))
                          .Build();

            _featureFileRepository.Setup(r => r.GetByFilePath($"{nameof(FeatureWithScenarioSteps)}.feature"))
            .Returns(new FeatureFile(new Gherkin.Ast.GherkinDocument(feature, new Gherkin.Ast.Comment[0])))
            .Verifiable();

            var featureInstance = new FeatureWithScenarioSteps();
            var output          = new Mock <ITestOutputHelper>();

            featureInstance.InternalOutput = output.Object;

            await _sut.ExecuteScenarioOutlineAsync(featureInstance, "test outline", "", 0);

            Assert.Equal(5, featureInstance.CallStack.Count);
            Assert.Equal(nameof(FeatureWithScenarioSteps.BackgroundStep), featureInstance.CallStack[0].Key);
        }
Beispiel #2
0
        public async Task ExecuteScenario_Executes_All_Scenario_Steps()
        {
            //arrange.
            var step1Text = "Given " + FeatureWithScenarioSteps.ScenarioStep1Text.Replace(@"(\d+)", "12", StringComparison.InvariantCultureIgnoreCase);
            var step2Text = "And " + FeatureWithScenarioSteps.ScenarioStep2Text.Replace(@"(\d+)", "15", StringComparison.InvariantCultureIgnoreCase);
            var step3Text = "When " + FeatureWithScenarioSteps.ScenarioStep3Text;
            var step4Text = "Then " + FeatureWithScenarioSteps.ScenarioStep4Text.Replace(@"(\d+)", "27", StringComparison.InvariantCultureIgnoreCase);

            var scenarioName = "scenario 12345";

            _featureFileRepository.Setup(r => r.GetByFilePath($"{nameof(FeatureWithScenarioSteps)}.feature"))
            .Returns(new FeatureFile(CreateGherkinDocument(scenarioName,
                                                           new string[]
            {
                step1Text,
                step2Text,
                step3Text,
                step4Text
            })))
            .Verifiable();

            var featureInstance = new FeatureWithScenarioSteps();
            var output          = new Mock <ITestOutputHelper>();

            featureInstance.InternalOutput = output.Object;

            //act.
            await _sut.ExecuteScenarioAsync(featureInstance, scenarioName);

            //assert.
            _featureFileRepository.Verify();

            Assert.Equal(4, featureInstance.CallStack.Count);

            Assert.Equal(nameof(FeatureWithScenarioSteps.ScenarioStep1), featureInstance.CallStack[0].Key);
            Assert.NotNull(featureInstance.CallStack[0].Value);
            Assert.Single(featureInstance.CallStack[0].Value);
            Assert.Equal(12, featureInstance.CallStack[0].Value[0]);
            output.Verify(o => o.WriteLine($"{step1Text}: PASSED"), Times.Once);

            Assert.Equal(nameof(FeatureWithScenarioSteps.ScenarioStep2), featureInstance.CallStack[1].Key);
            Assert.NotNull(featureInstance.CallStack[1].Value);
            Assert.Single(featureInstance.CallStack[1].Value);
            Assert.Equal(15, featureInstance.CallStack[1].Value[0]);
            output.Verify(o => o.WriteLine($"{step2Text}: PASSED"), Times.Once);

            Assert.Equal(nameof(FeatureWithScenarioSteps.ScenarioStep3), featureInstance.CallStack[2].Key);
            Assert.Null(featureInstance.CallStack[2].Value);
            output.Verify(o => o.WriteLine($"{step3Text}: PASSED"), Times.Once);

            Assert.Equal(nameof(FeatureWithScenarioSteps.ScenarioStep4), featureInstance.CallStack[3].Key);
            Assert.NotNull(featureInstance.CallStack[3].Value);
            Assert.Single(featureInstance.CallStack[3].Value);
            Assert.Equal(27, featureInstance.CallStack[3].Value[0]);
            output.Verify(o => o.WriteLine($"{step4Text}: PASSED"), Times.Once);
        }