示例#1
0
        public StepsBuilder AddStepBuilder(
            Scenario scenario)
        {
            if (this.StepBuilderGenerator == null)
            {
                throw new InvalidOperationException("Não há um 'StepBuilderGenerator' disponível.");
            }

            var hash = scenario.Hash;
            if (this.hashesAndSteps.ContainsKey(hash)) { return this.hashesAndSteps[hash]; }

            var builder = this.StepBuilderGenerator(scenario);
            this.hashesAndSteps.Add(scenario.Hash, builder);
            return builder;
        }
示例#2
0
        public void ShouldGenerateCodeThatWillHaveAClassWithTheNameOfTheFeatureAndTheNameOfTheScenario()
        {
            // mock
            var feature = new Feature() { Name = "Cliente, Exclusão" };
            var scenario = new Scenario() { Name = "Deve falhar quando cliente está vinculado à [1] produtos." };

            // prepare
            var builder = this.NewDefaultBuilder();
            builder.Feature = feature;
            builder.Scenario = scenario;

            // do
            var code = builder.ToCode();
            Console.Write(code);

            // check
            var hasCorrectClassName = this.HasStepsClassName(code, feature, scenario);
            Assert.IsTrue(hasCorrectClassName);
        }
示例#3
0
        private IEnumerable<SpecificationGroup> GenerateSpecificationGroupsFromFeatureFiles(
            IEnumerable<string> featureFiles)
        {
            var list = new List<SpecificationGroup>();

            foreach (var featureFile in featureFiles)
            {
                var scenario = new Scenario() { Name = "CENARIO_TESTE" };
                scenario.Statements.Given = "Dado que TESTE";
                scenario.Statements.When = "Quando TESTE";
                scenario.Statements.Then = "Então TESTE";

                var feature = new Feature() { File = featureFile };
                feature.Scenarios.Add(scenario);

                list.Add(new SpecificationGroup(feature));
            }

            return list;
        }
示例#4
0
        public void EnsureTestScenario()
        {
            this.EnsureTestFeature();

            var scenarioAttrib = this.TestMethod.GetCustomAttribute<TestScenarioAttribute>();
            if (scenarioAttrib == null)
            {
                throw new InvalidTestMethodException(
                    this.TestClass,
                    this.TestMethod);
            }

            this.testScenario = this.testFeature.Scenarios
                .Where(d => d.Name == scenarioAttrib.Name)
                .FirstOrDefault();

            if (this.testScenario == null)
            {
                throw new UnmatchingScenarioDeclarationException(
                    this.testFeature.Name,
                    scenarioAttrib.Name);
            }
        }
示例#5
0
        public void ShouldGenerateStepsForOneSingleStatement()
        {
            // mock
            var rootNs = "qualquer.coisa";
            var feature = new Feature() { Name = "Cliente, Exclusão" };
            var scenario = new Scenario()
            {
                @Name = "Deve falhar quando cliente está vinculado à [1] produtos.",
                @Statements =
                {
                    Given = "Dado o arquivo de feature ''",
                    When = "Quando tento criar o parser",
                    Then = "Então eu recebo uma exceção do tipo 'NBDD.Framework.Parsers.FeatureFileContentInvalidException'"
                }
            };
            var treatedScenario = scenario.MakeTreatedStatements();

            // prepare
            var builder = new CSharpFeatureStepsBuilder();
            builder.Feature = feature;
            builder.Scenario = scenario;
            builder.RootNamespace = rootNs;

            // do
            var code = builder.ToCode();
            Console.Write(code);

            // check
            Assert.IsNotNull(code);

            Assert.IsTrue(HasAttribute(code, "Given"), "Atributo 'Given' não encontrado");
            Assert.IsTrue(HasStatementMethod(code, scenario.Statements.Given), "Não temos o método para o statement de given");

            Assert.IsTrue(HasAttribute(code, "When"), "Atributo 'When' não encontrado");
            Assert.IsTrue(HasStatementMethod(code, scenario.Statements.When), "Não temos o método para o statement de when");

            Assert.IsTrue(HasAttribute(code, "Then"), "Atributo 'Then' não encontrado");
            Assert.IsTrue(HasStatementMethod(code, scenario.Statements.Then), "Não temos o método para o statement de then");
        }
示例#6
0
        private CSharpFeatureStepsBuilder NewDefaultBuilder()
        {
            // mock
            var feature = new Feature() { Name = "Cliente, Exclusão" };
            var scenario = new Scenario()
            {
                @Name = "Deve falhar quando cliente está vinculado à [1] produtos.",
                @Statements =
                {
                    Given = "Dado o arquivo de feature ''",
                    When = "Quando tento criar o parser",
                    Then = "Então eu recebo uma exceção do tipo 'NBDD.Framework.Parsers.FeatureFileContentInvalidException'"
                }
            };

            // prepare
            var builder = new CSharpFeatureStepsBuilder();
            builder.RootNamespace = RootNamespace;
            builder.Feature = feature;
            builder.Scenario = scenario;

            return builder;
        }
示例#7
0
        private bool HasStepsClassName(
            string code,
            Feature feature,
            Scenario scenario)
        {
            var classSignature = string.Concat(
                "public class ",
                feature.Name.ToClassName(),
                "_",
                scenario.Name.ToClassName());

            return code.Contains(classSignature);
        }
示例#8
0
 private StepsBuilder MakeStepsBuilder(Feature feature, Scenario scenario)
 {
     var builder = new CSharpFeatureStepsBuilder();
     builder.RootNamespace = this.RootNamespace;
     builder.Feature = feature;
     builder.Scenario = scenario;
     return builder;
 }
示例#9
0
 private bool HasTestForScenario(
     string code,
     Feature feature,
     Scenario scenario)
 {
     var className = feature.Name.ToClassName();
     var methodName = scenario.Name.ToMethodName();
     var methodCall = string.Concat("void ", className, "_", methodName, "()");
     return code.Contains(methodCall);
 }
示例#10
0
        public void ShouldGenerateTheScopeTraitWhenProvided()
        {
            // mock
            var rootNamespace = "empresa.grupo.modulo";
            var feature = new Feature() { Name = "Cliente, Exclusão" };
            var scenarios = new Scenario[0];

            // prepare
            var builder = new CSharpFeatureTestsBuilder();
            builder.RootNamespace = rootNamespace;
            builder.Feature = feature;
            builder.Scenarios = scenarios;

            // do
            var code = builder.ToCode();
            Console.Write(code);

            // check
            var hasNamespace = this.HasNamespace(code, rootNamespace);
            Assert.IsTrue(hasNamespace);
        }