TDD & BDD - dotNet Core

Nesta aula iremos verificar como é feito os testes de TDD e BDD em C#

assinaturaAssine nossa Comunidade

.Net Core - TDD e BDD

Manter a qualidade do software, principalmente para projetos grandes é algo extremamente essencial, coisas que muitas vezes não conseguimos enxergar por não entender o contexto geral do software que estamos fazendo e muitas vezes estamos mais preocupados na entrega das funções do que com a qualidade.

Então com isso, mostraremos duas técnicas essenciais utilizadas no C# para melhorar o código e a forma como trabalhamos.

Existem duas formas para garantir a qualidade do software:

  • Teste manual, que muitas vezes é custoso para empresa;
  • Teste automatizado, utilizando as técnicas do TDD(Test Driven Development) e do BDD(Behavior Driven Development).

Vamos mostrar um projeto de validação de CPF com um teste básico unitário e um teste básico de comportamento.

TDD

No VSStudio, clicar com o botão direito na solução para adicionar novo projeto NUnit Test Project

Para executar os testes com TDD, precisamos entrar na pasta TDD e rodar o comando:

      
        dotnet test
       
    

Vamos testar uma classe chamada Cliente para testar se o Cpf é válido ou inválido, utilizando os métodos IsTrue e IsFalse da Classe Assert.

      
        using NUnit.Framework;
        namespace TDD
        {
          public class Tests
          {

            [SetUp] 
            public void Setup() 
            {
              Cliente.DestroyAll();
            }

            [Test]
            public void ValidaCpfValido()
            {
              var cliente = new Cliente();
              cliente.CPF = "793.608.890-32"
              Assert.IsTrue(cliente.ValidaCpf());
            }

            [Test]
            public void ValidaCpfInValido()
            {
              var cliente = new Cliente();
              cliente.CPF = "793.608.890-33"
              Assert.IsFalse(cliente.ValidaCpf());
            }
          }
        }
       
    

BDD

BDD-Behavior Driven Development, teste de comportamento, não vem instalado por padrão no VSStudio.

Precisamos instalar um componente chamado specflow.

Além do specflow precisamos fazer a instalação do Selenium, que é um dos componente que vai abrir o browser e fará o teste como se fosse humano.

Para executar os testes com BDD, precisamos levantar a aplicação com o comando abaixo:

      
        dotnet watch run
       
    

Iremos entrar na pasta BddValidator e executar o comando:

      
        dotnet test
       
    

No projeto temos uma pasta chamada Features e o arquivo ValidateCPF.feature, que possui o código que precisa ser executado:

  • Features
    • ValidateCPF.feature
    • ValidateCPF.feature.cs
      
        Feature: Validate CPF 
        
        @mytag 

        Scenario: CPF Válido 
        Given i'm in home page
        And I type the CPF "583.068.670-84"
        When I clicl on button validate 
        Then I have the successful result
       
    

Na pasta Steps, arquivo ValidateCPFSteps, temos a implementação do código acima.

  • Steps
    • ValidateCPFSteps

Precisamos baixar o driver do Chrome de acordo com o sistema operacional. Abaixo, segue o código com parte da estrutura da implementação:

      
        using NUnit.Framework;
        using OpenQA.Selenium.Chrome;
        using TechTalk.SpecFlow;

        namespace BDDValidator.Steps
        {
          public class Tests
          {

            [SetUp] 
            public sealed class ValidateCPFStepDefinitions 
            {
              private ChromeDriver _chromeDriver;

              private readonly ScenarioContext _scenarioContext;

            }

            public ValidateCPFStepDefinitions(ScenarioContext scenarioContext)
            {
              _scenarioContext = _scenarioContext;

              _chromeDriver = new ChromeDriver(@"/Users/danilo/projetos/torne-se/aulas/dotnet_core/WebTddBddSharp/BddValidator/Drivers/mac");
            }

          }
        }
       
    

O Given faz um match do código que está escrito na Feature, acessando a página e digitando os campos:

      
        [Given(@"i'm in home page")]
        public void GivenImInHomePage()
        {
          _chromeDriver.Url = "https://localhost:5001";
        }

        [Given(@"I type the CPF)"]
        public void GivenITypeTheCPF(string cpf)
        {
          _chromeDriver.FindElementByCssSelector("#Nome").SendKeys("Danilo BDD");
          _chromeDriver.FindElementByCssSelector("#CPF").SendKeys(cpf);
        }
       
    

O teste abaixo faz o click no botão:

      
        [When(@"I click on button validate")]
        public void WhenIClickOnButtonValidate()
        {
          _chromeDriver.FindElementByCssSelector("input[type='submit']")
        }

       
    

O teste abaixo verifica se houve sucesso:

      
        [Then(@"I have the successful result")]
        public void ThenIHaveTheSuccessfukResult()
        {
          Assert.IsTrue(_chromeDriver.FindElementByCssSelector(".alert-success").Count > 0);
          _chromeDriver.Close();
          _chromeDriver.Dispose();
        }

       
    

TDD & BDD - dotNet Core

Nesta aula iremos verificar como é feito os testes de TDD e BDD em C#

Próximas Aulas:
assinaturaAssine nossa Comunidade

.Net Core - TDD e BDD

Manter a qualidade do software, principalmente para projetos grandes é algo extremamente essencial, coisas que muitas vezes não conseguimos enxergar por não entender o contexto geral do software que estamos fazendo e muitas vezes estamos mais preocupados na entrega das funções do que com a qualidade.

Então com isso, mostraremos duas técnicas essenciais utilizadas no C# para melhorar o código e a forma como trabalhamos.

Existem duas formas para garantir a qualidade do software:

  • Teste manual, que muitas vezes é custoso para empresa;
  • Teste automatizado, utilizando as técnicas do TDD(Test Driven Development) e do BDD(Behavior Driven Development).

Vamos mostrar um projeto de validação de CPF com um teste básico unitário e um teste básico de comportamento.

TDD

No VSStudio, clicar com o botão direito na solução para adicionar novo projeto NUnit Test Project

Para executar os testes com TDD, precisamos entrar na pasta TDD e rodar o comando:

      
        dotnet test
       
    

Vamos testar uma classe chamada Cliente para testar se o Cpf é válido ou inválido, utilizando os métodos IsTrue e IsFalse da Classe Assert.

      
        using NUnit.Framework;
        namespace TDD
        {
          public class Tests
          {

            [SetUp] 
            public void Setup() 
            {
              Cliente.DestroyAll();
            }

            [Test]
            public void ValidaCpfValido()
            {
              var cliente = new Cliente();
              cliente.CPF = "793.608.890-32"
              Assert.IsTrue(cliente.ValidaCpf());
            }

            [Test]
            public void ValidaCpfInValido()
            {
              var cliente = new Cliente();
              cliente.CPF = "793.608.890-33"
              Assert.IsFalse(cliente.ValidaCpf());
            }
          }
        }
       
    

BDD

BDD-Behavior Driven Development, teste de comportamento, não vem instalado por padrão no VSStudio.

Precisamos instalar um componente chamado specflow.

Além do specflow precisamos fazer a instalação do Selenium, que é um dos componente que vai abrir o browser e fará o teste como se fosse humano.

Para executar os testes com BDD, precisamos levantar a aplicação com o comando abaixo:

      
        dotnet watch run
       
    

Iremos entrar na pasta BddValidator e executar o comando:

      
        dotnet test
       
    

No projeto temos uma pasta chamada Features e o arquivo ValidateCPF.feature, que possui o código que precisa ser executado:

  • Features
    • ValidateCPF.feature
    • ValidateCPF.feature.cs
      
        Feature: Validate CPF 
        
        @mytag 

        Scenario: CPF Válido 
        Given i'm in home page
        And I type the CPF "583.068.670-84"
        When I clicl on button validate 
        Then I have the successful result
       
    

Na pasta Steps, arquivo ValidateCPFSteps, temos a implementação do código acima.

  • Steps
    • ValidateCPFSteps

Precisamos baixar o driver do Chrome de acordo com o sistema operacional. Abaixo, segue o código com parte da estrutura da implementação:

      
        using NUnit.Framework;
        using OpenQA.Selenium.Chrome;
        using TechTalk.SpecFlow;

        namespace BDDValidator.Steps
        {
          public class Tests
          {

            [SetUp] 
            public sealed class ValidateCPFStepDefinitions 
            {
              private ChromeDriver _chromeDriver;

              private readonly ScenarioContext _scenarioContext;

            }

            public ValidateCPFStepDefinitions(ScenarioContext scenarioContext)
            {
              _scenarioContext = _scenarioContext;

              _chromeDriver = new ChromeDriver(@"/Users/danilo/projetos/torne-se/aulas/dotnet_core/WebTddBddSharp/BddValidator/Drivers/mac");
            }

          }
        }
       
    

O Given faz um match do código que está escrito na Feature, acessando a página e digitando os campos:

      
        [Given(@"i'm in home page")]
        public void GivenImInHomePage()
        {
          _chromeDriver.Url = "https://localhost:5001";
        }

        [Given(@"I type the CPF)"]
        public void GivenITypeTheCPF(string cpf)
        {
          _chromeDriver.FindElementByCssSelector("#Nome").SendKeys("Danilo BDD");
          _chromeDriver.FindElementByCssSelector("#CPF").SendKeys(cpf);
        }
       
    

O teste abaixo faz o click no botão:

      
        [When(@"I click on button validate")]
        public void WhenIClickOnButtonValidate()
        {
          _chromeDriver.FindElementByCssSelector("input[type='submit']")
        }

       
    

O teste abaixo verifica se houve sucesso:

      
        [Then(@"I have the successful result")]
        public void ThenIHaveTheSuccessfukResult()
        {
          Assert.IsTrue(_chromeDriver.FindElementByCssSelector(".alert-success").Count > 0);
          _chromeDriver.Close();
          _chromeDriver.Dispose();
        }