Testes na plataforma .NET: TDD, Mocks, BDD e Selenium - Developers-SP - Janeiro-2018
O documento resume as principais técnicas e ferramentas para testes de software, como TDD, mocks, BDD e Selenium. Apresenta os conceitos e benefícios de cada abordagem, além de exemplos práticos de implementação com .NET.
Renato Groffe
◦ MicrosoftMost 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
Agenda
◦ Desenvolvimento desoftware – Cenários Comuns
◦ Test-Driven Development
◦ Mock Objects
◦ Behavior-Driven Development
◦ Testando interfaces Web com Selenium
Como contornar estesproblemas?
Metodologias ágeis
◦ XP (Extreme Programming) e Scrum
são os exemplos mais famosos
Testando um software
◦ Diferentes abordagens
13.
Por que testarum software?
◦ Garantir que o projeto atende às especificações
◦ Detectar falhas e defeitos antes da subida para produção
14.
Alguns tipos detestes
◦ 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
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
Exemplo de usodo xUnit
◦ Conversão de temperatura – Escala Fahrenheit para Celsius:
◦ Casos de teste (considerar 2 casas decimais para arredondamento):
C = (F – 32) / 1,8
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
Algumas soluções paratestes 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 paratestes 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 paratestes 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 deteoria
Mocks Aren't Stubs – Martin Fowler
https://martinfowler.com/articles/mocksArentStubs.html
Moq
◦ Framework opensource
◦ 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émopen source
◦ Alternativa ao uso do Moq, com um
funcionamento bastante semelhante ao deste
último
36.
E como utilizarisso em .NET?
Combinando o uso do Moq ou Nsubstitute a frameworks como MS Test, NUnit, xUnit.net,
SpecFlow, Selenium, Fluent Assertions...
MS Test
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
Recursos a seremutilizados
◦ Microsoft Visual Studio 2017
◦ .NET Core 2.0
◦ MS Test
◦ xUnit
◦ Moq
◦ NSubstitute
◦ Fluent Assertions
41.
Dificuldades na adoçãode 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 superartais 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)
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 aplataforma .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 outrosframeworks
◦ MS Test, Nunit, xUnit.net, Selenium, Moq, NSubstitute e Fluent Assertions
são algumas das opções possíveis...
MS Test
Exemplo de usodo SpecFlow
◦ Funcionalidade para conversão de alturas em pés para o equivalente em
metros
◦ Classe a ser implementada:
54.
Exemplo de usodo SpecFlow
◦ Casos de teste:
◦ Considerar 2 casas decimais para arredondamento da distância em metros
55.
Exemplo de usodo SpecFlow
◦ Regras para a implementação da classe ConversorTemperatura:
C = (F – 32) / 1,8
K = C + 273,15
56.
Selenium
◦ Testes automatizadosde 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 utilizaro 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 boasprá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