SlideShare uma empresa Scribd logo
1 de 63
Testes de Software
TDD, MOCKS, BDD E SELENIUM
Renato Groffe
◦ Microsoft Most Valuable Professional (MVP)
◦ Multi-Plataform Technical Audience Contributor (MTAC)
◦ Mais de 15 anos de experiência na área de Tecnologia
◦ Autor Técnico e Palestrante
Contatos
http://renatogroffe.net/
/renatogroffe /in/renatogroffe
/canaldotnet
/renatogroffe/@renato.groffe
/canaldotnet
Agenda
◦ Desenvolvimento de software – Cenários Comuns
◦ Test-Driven Development
◦ Mock Objects
◦ Behavior-Driven Development
◦ Testando interfaces Web com Selenium
Desenvolvimento de Software – Cenários comuns
Desenvolvimento – Cenários comuns
◦ Pressões por uma rápida entrega, prazos
muito curtos
Desenvolvimento – Cenários comuns
◦ Equipes reduzidas
Desenvolvimento – Cenários comuns
◦ Mudanças frequentes em requisitos
Desenvolvimento – Cenários Comuns
◦ Áreas de Negócio e Técnica nem sempre falam a mesma língua
Desenvolvimento – Cenários comuns
◦ Testes não são levados tão a sério
como se deveria
Como contornar estes problemas?
Como contornar estes problemas?
Metodologias ágeis
◦ XP (Extreme Programming) e Scrum
são os exemplos mais famosos
Testando um software
◦ Diferentes abordagens
Por que testar um software?
◦ Garantir que o projeto atende às especificações
◦ Detectar falhas e defeitos antes da subida para produção
Alguns tipos de testes
◦ Teste de unidade
◦ Teste de integração
◦ Teste de sistema
◦ Teste de aceitação
◦ Teste de regressão
◦ Teste de UI
Testes de unidade
◦ Automatizados
◦ Repetíveis
◦ Facilidade de implementação
◦ Reuso futuro
◦ Facilidade e rapidez de execução
Testes de Unidade na plataforma .NET
MS Test
Test-Driven Development (TDD)
◦ Desenvolvimento cíclico baseado na
codificação e execução de testes de unidade
◦ Testes são escritos antes mesmo da
codificação de classes ou métodos
◦ Validação de objetos e métodos (unidades)
◦ Abordagem comumente associada às
metodologias ágeis
Test-Driven Development (Red-Green-Refactor)
Exemplo prático - TDD
Recursos Utilizados
◦Microsoft Visual Studio 2017
◦.NET Core 2.0
◦MS Test, xUnit e NUnit
Exemplo de uso do xUnit
◦ Conversão de temperatura – Escala Fahrenheit para Celsius:
◦ Casos de teste (considerar 2 casas decimais para arredondamento):
C = (F – 32) / 1,8
Exemplo de uso do xUnit
◦ Classe a ser criada:
Sempre será fácil testar?
Dificuldades técnicas comuns
◦ Dependências entre diferentes partes de um
software
◦ Inexistência de ambientes com configurações
específicas para testes
◦ Integrações com parceiros que não disponibilizam
condições adequadas para testes
◦ O teste de determinados recursos precisa esperar
pela conclusão de uma ou mais funcionalidades
específicas
Como superar então estas dificuldades?
Simulando...
Imitando...
Algumas soluções para testes automatizados
Implementações fake
◦ Estruturas normalmente descartadas em produção
◦ Implementações contendo dados fixos e nenhuma
lógica
◦ Exemplo: utilização de um banco de dados “em
memória”
Algumas soluções para testes automatizados
Mock Objects
◦ Estruturas que simulam objetos reais
◦ Baseados em expectativas
◦ Enfatizam a interação entre objetos (comportamento),
prevendo inclusive possíveis falhas de execução
◦ Frameworks simplificam a utilização destas construções
Algumas soluções para testes automatizados
Stubs
◦ Estruturas com comportamento pré-determinado
◦ Podem fazer uso de implementações fake ou até
mesmo um framework para mock
◦ Não há a configuração de expectativas
Algumas considerações adicionais
◦ O termo dublê pode se referir a implementações fakes, mocks e stubs
◦ Temos também o conceito de objetos “dummy” (criados apenas para passagem de
parâmetros, sem uso posterior)
Um pouco de teoria
Mocks Aren't Stubs – Martin Fowler
https://martinfowler.com/articles/mocksArentStubs.html
Mocking Test em .NET
Moq
◦ Framework open source
◦ Simplifica a utilização de Mocks na validação de soluções
construídas em .NET
◦ Permite definir o retorno de métodos, propriedades e até a
geração de exceções em tempo de execução
◦ Dispensa a criação de Fakes e outras estruturas que seriam
descartadas posteriormente
NSubstitute
◦ Framework também open source
◦ Alternativa ao uso do Moq, com um
funcionamento bastante semelhante ao deste
último
E como utilizar isso em .NET?
Combinando o uso do Moq ou Nsubstitute a frameworks como MS Test, NUnit, xUnit.net,
SpecFlow, Selenium, Fluent Assertions...
MS Test
Exemplo prático
Caso de Estudo
◦ Consulta a um serviço de crédito (via CPF) – status possíveis:
◦ Parâmetro de envio inválido (retorno de pendências = null)
◦ Erro de comunicação (exceção retornada ao se invocar o serviço)
◦ Pessoa física sem Pendências (zero itens no retorno de pendências)
◦ Pessoa física inadimplente (ao menos uma pendência encontrada)
◦ A ideia por trás do uso de Mock Objects nesta situação é evitar consultas a um
tipo de serviço que é pago → as empresas que fornecem os dados não
costumam disponibilizar ambientes para testes
Caso de Estudo
Recursos a serem utilizados
◦ Microsoft Visual Studio 2017
◦ .NET Core 2.0
◦ MS Test
◦ xUnit
◦ Moq
◦ NSubstitute
◦ Fluent Assertions
Dificuldades na adoção de TDD
◦ Verificar pontos isolados (métodos, classes) nem sempre é uma solução
eficiente ou garantia de sucesso
◦ Problemas costumam surgir durante a integração de partes relacionadas
◦ Testes de unidade são compreendidos apenas por pessoas com um perfil
mais técnico
E como superar tais dificuldades?
A abordagem conhecida como Behavior-Driven Development pode
ser uma resposta a esta pergunta
Behavior-Driven Development (BDD)
◦ Metodologia de desenvolvimento proposta por Dan North em 2006
◦ User stories (histórias) descrevem o comportamento de features
(funcionalidades)
Estrutura de uma user story
Behavior-Driven Development (BDD)
◦ As histórias fazem uso de uma linguagem ubíqua (compreendida por todos
os envolvidos no projeto)
Behavior-Driven Development (BDD)
◦ Ciclo de desenvolvimento muito semelhante àquele existente para TDD
Behavior-Driven Development (BDD)
◦ Frameworks permitem que as user stories sejam executadas como testes de
aceitação ou regressão a partir de uma IDE
◦ Cucumber → primeira ferramenta a suportar BDD e base utilizada pelos principais
frameworks
◦ Gherkin → mecanismo utilizado pelo Cucumber para interpretar uma história;
suporte à internacionalização
BDD - Benefícios
◦ Melhor comunicação entre os profissionais envolvidos em um projeto
◦ Documentação simples e gerada de forma dinâmica
◦ Facilita o compartilhamento de conhecimentos a respeito de um projeto
◦ User stories apresentam objetivos mais claros e bem definidos
◦ Instrumento de grande valia em equipes que seguem metodologias ágeis
BDD e a plataforma .NET
◦ A opção mais utilizada na atualidade é o framework gratuito SpecFlow
http://www.specflow.org/
◦ O SpecFlow trabalha com especificações de funcionalidades, baseando-se para isto
em user stories
◦ Cenários correspondem a diferentes casos de teste no SpecFlow
◦ A utilização do SpecFlow costuma acontecer em conjunto com outros frameworks
SpecFlow e outros frameworks
◦ MS Test, Nunit, xUnit.net, Selenium, Moq, NSubstitute e Fluent Assertions
são algumas das opções possíveis...
MS Test
Exemplo prático - BDD
Recursos Utilizados
◦ Microsoft Visual Studio 2017
◦ MS Test
◦ SpecFlow
Exemplo de uso do SpecFlow
◦ Funcionalidade para conversão de alturas em pés para o equivalente em
metros
◦ Classe a ser implementada:
Exemplo de uso do SpecFlow
◦ Casos de teste:
◦ Considerar 2 casas decimais para arredondamento da distância em metros
Exemplo de uso do SpecFlow
◦ Regras para a implementação da classe ConversorTemperatura:
C = (F – 32) / 1,8
K = C + 273,15
Selenium
◦ Testes automatizados de interfaces Web
◦ Suporta linguagens como C#, Java, Ruby, Python e Node.js
◦ Compatibilidade com browsers como Firefox, Chrome, Internet Explorer,
Opera
◦ Site: http://www.seleniumhq.org/
E como utilizar o Selenium em .NET?
Combinando o uso do Selenium a frameworks como MS Test, NUnit, xUnit.net, SpecFlow, Moq,
Nsubstitute, Fluent Assertions ....
MS Test
Selenium e boas práticas
◦ Uso do padrão Page Object, proposto por Martin Fowler
◦ Encapsulamento das chamadas envolvendo a manipulação de elementos
HTML, de forma a simplificar a escrita de testes
◦ Referência:
http://martinfowler.com/bliki/PageObject.html
Exemplo prático – SpecFlow + Selenium
SpecFlow + Selenium
◦ Conversão de milhas para Km
◦ 4 casas de arredondamento
Dúvidas?
Parabéns Luigi!
Obrigado!

Mais conteúdo relacionado

Mais procurados

TDD e BDD - Developers-SP - Abril/2017
TDD e BDD - Developers-SP - Abril/2017TDD e BDD - Developers-SP - Abril/2017
TDD e BDD - Developers-SP - Abril/2017Renato Groff
 
Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017Renato Groff
 
.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017Renato Groff
 
TDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeRafaela Prado
 
Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDDKleber Bernardo
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015Renato Groff
 
Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGbeiraJUG
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)Renato Groff
 
Final Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applicationsFinal Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applicationsLuiz Henrique
 
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Renato Groffe
 
Estratégias de testes em 10 passos, step by step!
Estratégias de testes em 10 passos, step by step!Estratégias de testes em 10 passos, step by step!
Estratégias de testes em 10 passos, step by step!Ariane Izac
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agileAlini Rebonatto
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeUniversidade Tiradentes
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junitcejug
 

Mais procurados (20)

TDD e BDD - Developers-SP - Abril/2017
TDD e BDD - Developers-SP - Abril/2017TDD e BDD - Developers-SP - Abril/2017
TDD e BDD - Developers-SP - Abril/2017
 
Introdução ao TDD
Introdução ao TDDIntrodução ao TDD
Introdução ao TDD
 
Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017Behavior-Driven Development (BDD) - Abril/2017
Behavior-Driven Development (BDD) - Abril/2017
 
.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017.NET Core e Testes de Unidade - Visual Studio Summit 2017
.NET Core e Testes de Unidade - Visual Studio Summit 2017
 
TDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao testeTDD Desenvolvimento orientado ao teste
TDD Desenvolvimento orientado ao teste
 
Test-Driven Develpment - TDD
Test-Driven Develpment - TDDTest-Driven Develpment - TDD
Test-Driven Develpment - TDD
 
BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015BDD (Behavior-Driven Development) - Setembro/2015
BDD (Behavior-Driven Development) - Setembro/2015
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
Testes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUGTestes Unitários - 1 Sessão beiraJUG
Testes Unitários - 1 Sessão beiraJUG
 
TDD (Test-Driven Development)
TDD (Test-Driven Development)TDD (Test-Driven Development)
TDD (Test-Driven Development)
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Final Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applicationsFinal Project (2013): Test-Driven Development applied on web applications
Final Project (2013): Test-Driven Development applied on web applications
 
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
Automatizando Testes de Integração com Azure DevOps | DevOps Experience - Fev...
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
Estratégias de testes em 10 passos, step by step!
Estratégias de testes em 10 passos, step by step!Estratégias de testes em 10 passos, step by step!
Estratégias de testes em 10 passos, step by step!
 
Automação de testes para equipes agile
Automação de testes para equipes agileAutomação de testes para equipes agile
Automação de testes para equipes agile
 
Desenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por testeDesenvolvimento dirigido por comportamento e por teste
Desenvolvimento dirigido por comportamento e por teste
 
Mocking Test
Mocking TestMocking Test
Mocking Test
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
 

Semelhante a Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janeiro-2018

Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Renato Groff
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)Renato Groff
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Renato Groff
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Renato Groff
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netRenato Groff
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Renato Groff
 
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...iMasters
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...Renato Groff
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayRenato Groff
 
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018Renato Groff
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testeselliando dias
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesCamilo Ribeiro
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Renato Groff
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Diego Pacheco
 
Desconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiDesconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiFelipe Caputo
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiMayara Fernandes
 

Semelhante a Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janeiro-2018 (20)

Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017Mocking Test - ThinkUp! - Abril/2017
Mocking Test - ThinkUp! - Abril/2017
 
BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)BDD (Behavior-Driven Development)
BDD (Behavior-Driven Development)
 
Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016Behavior-Driven Development (BDD) - DevOps Summit 2016
Behavior-Driven Development (BDD) - DevOps Summit 2016
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - Inter...
 
Test-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.netTest-Driven Development (TDD) utilizando o framework xUnit.net
Test-Driven Development (TDD) utilizando o framework xUnit.net
 
Mocking Test - Outubro/2015
Mocking Test - Outubro/2015Mocking Test - Outubro/2015
Mocking Test - Outubro/2015
 
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
InterCon 2017 - Indo além dos testes de classes com BDD (Behavior-Driven Deve...
 
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
Indo além dos testes de classes com BDD (Behavior-Driven Development) - DevOp...
 
Test-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding DayTest-Driven Development (TDD) - MSP Coding Day
Test-Driven Development (TDD) - MSP Coding Day
 
BDD com SpecFlow
BDD com SpecFlowBDD com SpecFlow
BDD com SpecFlow
 
Bdd com spec flow
Bdd com spec flowBdd com spec flow
Bdd com spec flow
 
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
Testando Aplicações Web com Selenium WebDriver - .NET SP - Novembro-2018
 
Metodologias Ageis
Metodologias AgeisMetodologias Ageis
Metodologias Ageis
 
Desenvolvimento Guiado por Testes
Desenvolvimento Guiado por TestesDesenvolvimento Guiado por Testes
Desenvolvimento Guiado por Testes
 
Desenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por TestesDesenvolvimento Dirigido por Testes
Desenvolvimento Dirigido por Testes
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
 
Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1Treinamento Testes Unitários - parte 1
Treinamento Testes Unitários - parte 1
 
Desconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiDesconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em Delphi
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
 
[CEFETMG][ESw] Aula 6 - Conceitos de projeto
[CEFETMG][ESw] Aula 6 - Conceitos de projeto[CEFETMG][ESw] Aula 6 - Conceitos de projeto
[CEFETMG][ESw] Aula 6 - Conceitos de projeto
 

Mais de Renato Groffe

Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...Renato Groffe
 
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ....NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...Renato Groffe
 
Orquestrando processos de negócio com .NET + Azure Durable Functions | Cloud4...
Orquestrando processos de negócio com .NET + Azure Durable Functions | Cloud4...Orquestrando processos de negócio com .NET + Azure Durable Functions | Cloud4...
Orquestrando processos de negócio com .NET + Azure Durable Functions | Cloud4...Renato Groffe
 
Dapr + Microservices: descomplicando a implementação de Aplicações Distribuíd...
Dapr + Microservices: descomplicando a implementação de Aplicações Distribuíd...Dapr + Microservices: descomplicando a implementação de Aplicações Distribuíd...
Dapr + Microservices: descomplicando a implementação de Aplicações Distribuíd...Renato Groffe
 
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...Renato Groffe
 
kind + Kubernetes: ambientes locais, testes de integração | DevOps Experience...
kind + Kubernetes: ambientes locais, testes de integração | DevOps Experience...kind + Kubernetes: ambientes locais, testes de integração | DevOps Experience...
kind + Kubernetes: ambientes locais, testes de integração | DevOps Experience...Renato Groffe
 
.NET 7: novidades no Desenvolvimento Back-End | Agrotools - Novembro-2022
.NET 7: novidades no Desenvolvimento Back-End | Agrotools - Novembro-2022.NET 7: novidades no Desenvolvimento Back-End | Agrotools - Novembro-2022
.NET 7: novidades no Desenvolvimento Back-End | Agrotools - Novembro-2022Renato Groffe
 
OpenTelemetry + Jaeger + .NET: Monitoramento e Tracing Distribuído em Aplicaç...
OpenTelemetry + Jaeger + .NET: Monitoramento e Tracing Distribuído em Aplicaç...OpenTelemetry + Jaeger + .NET: Monitoramento e Tracing Distribuído em Aplicaç...
OpenTelemetry + Jaeger + .NET: Monitoramento e Tracing Distribuído em Aplicaç...Renato Groffe
 
.NET 7: novidades no Desenvolvimento Back-End | Protech Solutions - Agosto-2022
.NET 7: novidades no Desenvolvimento Back-End | Protech Solutions - Agosto-2022.NET 7: novidades no Desenvolvimento Back-End | Protech Solutions - Agosto-2022
.NET 7: novidades no Desenvolvimento Back-End | Protech Solutions - Agosto-2022Renato Groffe
 
Pipeline as Code + Azure DevOps: automações com o Azure Pipelines | DevOps Ex...
Pipeline as Code + Azure DevOps: automações com o Azure Pipelines | DevOps Ex...Pipeline as Code + Azure DevOps: automações com o Azure Pipelines | DevOps Ex...
Pipeline as Code + Azure DevOps: automações com o Azure Pipelines | DevOps Ex...Renato Groffe
 
Kubernetes e Escalabilidade | Paraná Banco - Julho-2022
Kubernetes e Escalabilidade | Paraná Banco - Julho-2022Kubernetes e Escalabilidade | Paraná Banco - Julho-2022
Kubernetes e Escalabilidade | Paraná Banco - Julho-2022Renato Groffe
 
Kubernetes + KEDA: escalando aplicações de forma descomplicada | Cloud Confer...
Kubernetes + KEDA: escalando aplicações de forma descomplicada | Cloud Confer...Kubernetes + KEDA: escalando aplicações de forma descomplicada | Cloud Confer...
Kubernetes + KEDA: escalando aplicações de forma descomplicada | Cloud Confer...Renato Groffe
 
.NET: Passado, Presente, Futuro, Mercado de Trabalho… | Generation Brazil
.NET: Passado, Presente, Futuro, Mercado de Trabalho… | Generation Brazil.NET: Passado, Presente, Futuro, Mercado de Trabalho… | Generation Brazil
.NET: Passado, Presente, Futuro, Mercado de Trabalho… | Generation BrazilRenato Groffe
 
Azure Container Apps: visão geral e primeiros passos | Azure Weekend 2022 - P...
Azure Container Apps: visão geral e primeiros passos | Azure Weekend 2022 - P...Azure Container Apps: visão geral e primeiros passos | Azure Weekend 2022 - P...
Azure Container Apps: visão geral e primeiros passos | Azure Weekend 2022 - P...Renato Groffe
 
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | Cloud Conferen...
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | Cloud Conferen...Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | Cloud Conferen...
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | Cloud Conferen...Renato Groffe
 
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | DevOps Experie...
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | DevOps Experie...Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | DevOps Experie...
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | DevOps Experie...Renato Groffe
 
Aplicações Resilientes e Chaos Engineering em .NET com Polly + Simmy | Festiv...
Aplicações Resilientes e Chaos Engineering em .NET com Polly + Simmy | Festiv...Aplicações Resilientes e Chaos Engineering em .NET com Polly + Simmy | Festiv...
Aplicações Resilientes e Chaos Engineering em .NET com Polly + Simmy | Festiv...Renato Groffe
 
Kubernetes + KEDA: escalando aplicações de forma descomplicada | DevOps Exper...
Kubernetes + KEDA: escalando aplicações de forma descomplicada | DevOps Exper...Kubernetes + KEDA: escalando aplicações de forma descomplicada | DevOps Exper...
Kubernetes + KEDA: escalando aplicações de forma descomplicada | DevOps Exper...Renato Groffe
 
Nuvem em 2022: primeiros passos, Azure, tecnologias, carreira | SENAI Santo A...
Nuvem em 2022: primeiros passos, Azure, tecnologias, carreira | SENAI Santo A...Nuvem em 2022: primeiros passos, Azure, tecnologias, carreira | SENAI Santo A...
Nuvem em 2022: primeiros passos, Azure, tecnologias, carreira | SENAI Santo A...Renato Groffe
 
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD....NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...Renato Groffe
 

Mais de Renato Groffe (20)

Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
 
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ....NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
 
Orquestrando processos de negócio com .NET + Azure Durable Functions | Cloud4...
Orquestrando processos de negócio com .NET + Azure Durable Functions | Cloud4...Orquestrando processos de negócio com .NET + Azure Durable Functions | Cloud4...
Orquestrando processos de negócio com .NET + Azure Durable Functions | Cloud4...
 
Dapr + Microservices: descomplicando a implementação de Aplicações Distribuíd...
Dapr + Microservices: descomplicando a implementação de Aplicações Distribuíd...Dapr + Microservices: descomplicando a implementação de Aplicações Distribuíd...
Dapr + Microservices: descomplicando a implementação de Aplicações Distribuíd...
 
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
Kubernetes e Escalabilidade: processando milhares/milhões de acessos simultân...
 
kind + Kubernetes: ambientes locais, testes de integração | DevOps Experience...
kind + Kubernetes: ambientes locais, testes de integração | DevOps Experience...kind + Kubernetes: ambientes locais, testes de integração | DevOps Experience...
kind + Kubernetes: ambientes locais, testes de integração | DevOps Experience...
 
.NET 7: novidades no Desenvolvimento Back-End | Agrotools - Novembro-2022
.NET 7: novidades no Desenvolvimento Back-End | Agrotools - Novembro-2022.NET 7: novidades no Desenvolvimento Back-End | Agrotools - Novembro-2022
.NET 7: novidades no Desenvolvimento Back-End | Agrotools - Novembro-2022
 
OpenTelemetry + Jaeger + .NET: Monitoramento e Tracing Distribuído em Aplicaç...
OpenTelemetry + Jaeger + .NET: Monitoramento e Tracing Distribuído em Aplicaç...OpenTelemetry + Jaeger + .NET: Monitoramento e Tracing Distribuído em Aplicaç...
OpenTelemetry + Jaeger + .NET: Monitoramento e Tracing Distribuído em Aplicaç...
 
.NET 7: novidades no Desenvolvimento Back-End | Protech Solutions - Agosto-2022
.NET 7: novidades no Desenvolvimento Back-End | Protech Solutions - Agosto-2022.NET 7: novidades no Desenvolvimento Back-End | Protech Solutions - Agosto-2022
.NET 7: novidades no Desenvolvimento Back-End | Protech Solutions - Agosto-2022
 
Pipeline as Code + Azure DevOps: automações com o Azure Pipelines | DevOps Ex...
Pipeline as Code + Azure DevOps: automações com o Azure Pipelines | DevOps Ex...Pipeline as Code + Azure DevOps: automações com o Azure Pipelines | DevOps Ex...
Pipeline as Code + Azure DevOps: automações com o Azure Pipelines | DevOps Ex...
 
Kubernetes e Escalabilidade | Paraná Banco - Julho-2022
Kubernetes e Escalabilidade | Paraná Banco - Julho-2022Kubernetes e Escalabilidade | Paraná Banco - Julho-2022
Kubernetes e Escalabilidade | Paraná Banco - Julho-2022
 
Kubernetes + KEDA: escalando aplicações de forma descomplicada | Cloud Confer...
Kubernetes + KEDA: escalando aplicações de forma descomplicada | Cloud Confer...Kubernetes + KEDA: escalando aplicações de forma descomplicada | Cloud Confer...
Kubernetes + KEDA: escalando aplicações de forma descomplicada | Cloud Confer...
 
.NET: Passado, Presente, Futuro, Mercado de Trabalho… | Generation Brazil
.NET: Passado, Presente, Futuro, Mercado de Trabalho… | Generation Brazil.NET: Passado, Presente, Futuro, Mercado de Trabalho… | Generation Brazil
.NET: Passado, Presente, Futuro, Mercado de Trabalho… | Generation Brazil
 
Azure Container Apps: visão geral e primeiros passos | Azure Weekend 2022 - P...
Azure Container Apps: visão geral e primeiros passos | Azure Weekend 2022 - P...Azure Container Apps: visão geral e primeiros passos | Azure Weekend 2022 - P...
Azure Container Apps: visão geral e primeiros passos | Azure Weekend 2022 - P...
 
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | Cloud Conferen...
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | Cloud Conferen...Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | Cloud Conferen...
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | Cloud Conferen...
 
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | DevOps Experie...
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | DevOps Experie...Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | DevOps Experie...
Tracing Distribuído em Aplicações com OpenTelemetry + Jaeger | DevOps Experie...
 
Aplicações Resilientes e Chaos Engineering em .NET com Polly + Simmy | Festiv...
Aplicações Resilientes e Chaos Engineering em .NET com Polly + Simmy | Festiv...Aplicações Resilientes e Chaos Engineering em .NET com Polly + Simmy | Festiv...
Aplicações Resilientes e Chaos Engineering em .NET com Polly + Simmy | Festiv...
 
Kubernetes + KEDA: escalando aplicações de forma descomplicada | DevOps Exper...
Kubernetes + KEDA: escalando aplicações de forma descomplicada | DevOps Exper...Kubernetes + KEDA: escalando aplicações de forma descomplicada | DevOps Exper...
Kubernetes + KEDA: escalando aplicações de forma descomplicada | DevOps Exper...
 
Nuvem em 2022: primeiros passos, Azure, tecnologias, carreira | SENAI Santo A...
Nuvem em 2022: primeiros passos, Azure, tecnologias, carreira | SENAI Santo A...Nuvem em 2022: primeiros passos, Azure, tecnologias, carreira | SENAI Santo A...
Nuvem em 2022: primeiros passos, Azure, tecnologias, carreira | SENAI Santo A...
 
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD....NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
.NET + Microsserviços: alternativas open source para descomplicar a vida | TD...
 

Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janeiro-2018

  • 1. Testes de Software TDD, MOCKS, BDD E SELENIUM
  • 2. Renato Groffe ◦ Microsoft Most Valuable Professional (MVP) ◦ Multi-Plataform Technical Audience Contributor (MTAC) ◦ Mais de 15 anos de experiência na área de Tecnologia ◦ Autor Técnico e Palestrante
  • 4. Agenda ◦ Desenvolvimento de software – Cenários Comuns ◦ Test-Driven Development ◦ Mock Objects ◦ Behavior-Driven Development ◦ Testando interfaces Web com Selenium
  • 5. Desenvolvimento de Software – Cenários comuns
  • 6. Desenvolvimento – Cenários comuns ◦ Pressões por uma rápida entrega, prazos muito curtos
  • 7. Desenvolvimento – Cenários comuns ◦ Equipes reduzidas
  • 8. Desenvolvimento – Cenários comuns ◦ Mudanças frequentes em requisitos
  • 9. Desenvolvimento – Cenários Comuns ◦ Áreas de Negócio e Técnica nem sempre falam a mesma língua
  • 10. Desenvolvimento – Cenários comuns ◦ Testes não são levados tão a sério como se deveria
  • 11. Como contornar estes problemas?
  • 12. Como contornar estes problemas? Metodologias ágeis ◦ XP (Extreme Programming) e Scrum são os exemplos mais famosos Testando um software ◦ Diferentes abordagens
  • 13. Por que testar um software? ◦ Garantir que o projeto atende às especificações ◦ Detectar falhas e defeitos antes da subida para produção
  • 14. Alguns tipos de testes ◦ Teste de unidade ◦ Teste de integração ◦ Teste de sistema ◦ Teste de aceitação ◦ Teste de regressão ◦ Teste de UI
  • 15. Testes de unidade ◦ Automatizados ◦ Repetíveis ◦ Facilidade de implementação ◦ Reuso futuro ◦ Facilidade e rapidez de execução
  • 16. Testes de Unidade na plataforma .NET MS Test
  • 17. Test-Driven Development (TDD) ◦ Desenvolvimento cíclico baseado na codificação e execução de testes de unidade ◦ Testes são escritos antes mesmo da codificação de classes ou métodos ◦ Validação de objetos e métodos (unidades) ◦ Abordagem comumente associada às metodologias ágeis
  • 20. Recursos Utilizados ◦Microsoft Visual Studio 2017 ◦.NET Core 2.0 ◦MS Test, xUnit e NUnit
  • 21. Exemplo de uso do xUnit ◦ Conversão de temperatura – Escala Fahrenheit para Celsius: ◦ Casos de teste (considerar 2 casas decimais para arredondamento): C = (F – 32) / 1,8
  • 22. Exemplo de uso do xUnit ◦ Classe a ser criada:
  • 24. Dificuldades técnicas comuns ◦ Dependências entre diferentes partes de um software ◦ Inexistência de ambientes com configurações específicas para testes ◦ Integrações com parceiros que não disponibilizam condições adequadas para testes ◦ O teste de determinados recursos precisa esperar pela conclusão de uma ou mais funcionalidades específicas
  • 25. Como superar então estas dificuldades?
  • 28. Algumas soluções para testes automatizados Implementações fake ◦ Estruturas normalmente descartadas em produção ◦ Implementações contendo dados fixos e nenhuma lógica ◦ Exemplo: utilização de um banco de dados “em memória”
  • 29. Algumas soluções para testes automatizados Mock Objects ◦ Estruturas que simulam objetos reais ◦ Baseados em expectativas ◦ Enfatizam a interação entre objetos (comportamento), prevendo inclusive possíveis falhas de execução ◦ Frameworks simplificam a utilização destas construções
  • 30. Algumas soluções para testes automatizados Stubs ◦ Estruturas com comportamento pré-determinado ◦ Podem fazer uso de implementações fake ou até mesmo um framework para mock ◦ Não há a configuração de expectativas
  • 31. Algumas considerações adicionais ◦ O termo dublê pode se referir a implementações fakes, mocks e stubs ◦ Temos também o conceito de objetos “dummy” (criados apenas para passagem de parâmetros, sem uso posterior)
  • 32. Um pouco de teoria Mocks Aren't Stubs – Martin Fowler https://martinfowler.com/articles/mocksArentStubs.html
  • 34. Moq ◦ Framework open source ◦ Simplifica a utilização de Mocks na validação de soluções construídas em .NET ◦ Permite definir o retorno de métodos, propriedades e até a geração de exceções em tempo de execução ◦ Dispensa a criação de Fakes e outras estruturas que seriam descartadas posteriormente
  • 35. NSubstitute ◦ Framework também open source ◦ Alternativa ao uso do Moq, com um funcionamento bastante semelhante ao deste último
  • 36. E como utilizar isso em .NET? Combinando o uso do Moq ou Nsubstitute a frameworks como MS Test, NUnit, xUnit.net, SpecFlow, Selenium, Fluent Assertions... MS Test
  • 38. Caso de Estudo ◦ Consulta a um serviço de crédito (via CPF) – status possíveis: ◦ Parâmetro de envio inválido (retorno de pendências = null) ◦ Erro de comunicação (exceção retornada ao se invocar o serviço) ◦ Pessoa física sem Pendências (zero itens no retorno de pendências) ◦ Pessoa física inadimplente (ao menos uma pendência encontrada) ◦ A ideia por trás do uso de Mock Objects nesta situação é evitar consultas a um tipo de serviço que é pago → as empresas que fornecem os dados não costumam disponibilizar ambientes para testes
  • 40. Recursos a serem utilizados ◦ Microsoft Visual Studio 2017 ◦ .NET Core 2.0 ◦ MS Test ◦ xUnit ◦ Moq ◦ NSubstitute ◦ Fluent Assertions
  • 41. Dificuldades na adoção de TDD ◦ Verificar pontos isolados (métodos, classes) nem sempre é uma solução eficiente ou garantia de sucesso ◦ Problemas costumam surgir durante a integração de partes relacionadas ◦ Testes de unidade são compreendidos apenas por pessoas com um perfil mais técnico
  • 42. E como superar tais dificuldades? A abordagem conhecida como Behavior-Driven Development pode ser uma resposta a esta pergunta
  • 43. Behavior-Driven Development (BDD) ◦ Metodologia de desenvolvimento proposta por Dan North em 2006 ◦ User stories (histórias) descrevem o comportamento de features (funcionalidades)
  • 44. Estrutura de uma user story
  • 45. Behavior-Driven Development (BDD) ◦ As histórias fazem uso de uma linguagem ubíqua (compreendida por todos os envolvidos no projeto)
  • 46. Behavior-Driven Development (BDD) ◦ Ciclo de desenvolvimento muito semelhante àquele existente para TDD
  • 47. Behavior-Driven Development (BDD) ◦ Frameworks permitem que as user stories sejam executadas como testes de aceitação ou regressão a partir de uma IDE ◦ Cucumber → primeira ferramenta a suportar BDD e base utilizada pelos principais frameworks ◦ Gherkin → mecanismo utilizado pelo Cucumber para interpretar uma história; suporte à internacionalização
  • 48. BDD - Benefícios ◦ Melhor comunicação entre os profissionais envolvidos em um projeto ◦ Documentação simples e gerada de forma dinâmica ◦ Facilita o compartilhamento de conhecimentos a respeito de um projeto ◦ User stories apresentam objetivos mais claros e bem definidos ◦ Instrumento de grande valia em equipes que seguem metodologias ágeis
  • 49. BDD e a plataforma .NET ◦ A opção mais utilizada na atualidade é o framework gratuito SpecFlow http://www.specflow.org/ ◦ O SpecFlow trabalha com especificações de funcionalidades, baseando-se para isto em user stories ◦ Cenários correspondem a diferentes casos de teste no SpecFlow ◦ A utilização do SpecFlow costuma acontecer em conjunto com outros frameworks
  • 50. SpecFlow e outros frameworks ◦ MS Test, Nunit, xUnit.net, Selenium, Moq, NSubstitute e Fluent Assertions são algumas das opções possíveis... MS Test
  • 52. Recursos Utilizados ◦ Microsoft Visual Studio 2017 ◦ MS Test ◦ SpecFlow
  • 53. Exemplo de uso do SpecFlow ◦ Funcionalidade para conversão de alturas em pés para o equivalente em metros ◦ Classe a ser implementada:
  • 54. Exemplo de uso do SpecFlow ◦ Casos de teste: ◦ Considerar 2 casas decimais para arredondamento da distância em metros
  • 55. Exemplo de uso do SpecFlow ◦ Regras para a implementação da classe ConversorTemperatura: C = (F – 32) / 1,8 K = C + 273,15
  • 56. Selenium ◦ Testes automatizados de interfaces Web ◦ Suporta linguagens como C#, Java, Ruby, Python e Node.js ◦ Compatibilidade com browsers como Firefox, Chrome, Internet Explorer, Opera ◦ Site: http://www.seleniumhq.org/
  • 57. E como utilizar o Selenium em .NET? Combinando o uso do Selenium a frameworks como MS Test, NUnit, xUnit.net, SpecFlow, Moq, Nsubstitute, Fluent Assertions .... MS Test
  • 58. Selenium e boas práticas ◦ Uso do padrão Page Object, proposto por Martin Fowler ◦ Encapsulamento das chamadas envolvendo a manipulação de elementos HTML, de forma a simplificar a escrita de testes ◦ Referência: http://martinfowler.com/bliki/PageObject.html
  • 59. Exemplo prático – SpecFlow + Selenium
  • 60. SpecFlow + Selenium ◦ Conversão de milhas para Km ◦ 4 casas de arredondamento