test-driven development (tdd) utilizando o framework xunit.net
TRANSCRIPT
![Page 1: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/1.jpg)
Test-Driven Development (TDD) utilizando o framework xUnit.net
Renato GroffeJulho/2015
![Page 2: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/2.jpg)
Apresentação – Renato Groffe
Mais de 15 anos de experiência na área de Tecnologia
Pós-graduação em Engenharia de Software – ênfase em SOA
MBA em Business Intelligence
Graduação em Sistemas de Informação
Técnico em Processamento de Dados
MTAC (Microsoft Technical Audience Contributor), MCP, Microsoft Specialist, MCTS, OCA, ITIL, COBIT
![Page 3: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/3.jpg)
Contatos Página no Facebook
https://www.facebook.com/RenatoGroffeSW
Perfil no Facebookhttps://www.facebook.com/renatogroff
LinkedInhttp://br.linkedin.com/in/renatogroffe
![Page 4: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/4.jpg)
Recurso Utilizados Visual Studio 2013
xUnit 2.0.0
![Page 5: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/5.jpg)
Motivos que contribuem para a falta de testes
Quais os impactos da falta de testes?
Visão geral dos diferentes tipos de testes na área de software
Testes unitários e a plataforma .NET
TDD: conceitos gerais
Implementação de um exemplo prático
Data-Driven Unit Testing
Testes unitários e o Visual Studio 2015
Agenda
![Page 6: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/6.jpg)
Testes são realmente levados a sério?
![Page 7: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/7.jpg)
Motivos que contribuem para a falta de testes A realização de testes é muitas vezes negligenciada:
◦ Falta de planejamento
◦ Tempo escasso
◦ Equipes reduzidas e sobrecarregadas, trabalhando simultaneamente em vários projetos
◦ Falta de hábito
◦ Excesso de confiança de alguns profissionais
![Page 8: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/8.jpg)
Negligência seguida de consequências desagradáveis...
![Page 9: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/9.jpg)
Quais os impactos da falta de testes?
Retrabalho
Custos que excedem o orçamento
Conflitos entre membros de uma equipe técnica ou junto à área de negócios
Prejuízos à imagem da equipe ou empresa responsável por um projeto
![Page 10: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/10.jpg)
Software: esperado x entregue
![Page 11: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/11.jpg)
Objetivos dos testes em um software
Garantir que o produto atende aquilo que foi especificado para o projeto
◦ Verificação do correto funcionamento de uma aplicação
◦ Detecção de falhas e defeitos que poderiam passar em branco até a subida em Produção
![Page 12: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/12.jpg)
Os diferentes tipos de teste na área de software
Teste de unidade (ou teste unitário): verificação das menores unidades (método, classe, objeto) em um software, a fim de determinar a lógica de uma estrutura sob análise
Teste de integração: análise do funcionamento em conjunto das diferentes partes que compõem uma aplicação
Teste de sistema: simulação de uma situação real, em um ambiente equivalente ao de Produção
Teste de aceitação: conduzidos por um grupo de usuários finais com o intuito de simular operações cotidianas
Teste de regressão: verifica se mudanças introduzidas em uma versão resultam em efeitos colaterais nas funcionalidades pré-existentes
![Page 13: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/13.jpg)
Testes unitários: uma visão geral
São características comumente atribuídas aos testes unitários:
◦ São automatizados e repetíveis
◦ Podem ser implementados facilmente
◦ Uma vez escritos, os testes devem ser mantidos para reuso futuro
◦ Qualquer profissional envolvido com o desenvolvimento de uma aplicação deve ser capaz de executá-los
◦ Facilmente acionáveis, com isto acontecendo a partir de um botão ou item de menu dentro de uma IDE
◦ Rapidez na execução
![Page 14: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/14.jpg)
Testes unitários na plataforma .NET
Assim como as principais plataformas da atualidade, o .NET Framework conta com diversas alternativas para a implementação de testes unitários:
◦ Visual Studio Unit Testing Framework (MS Test)
◦ NUnit (http://www.nunit.org/)
◦ xUnit.net (https://github.com/xunit)
É possível integrar a utilização destes frameworks ao processo de build de uma aplicação → O Team Foundation é um bom exemplo de solução que suporta este tipo de funcionalidade
![Page 15: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/15.jpg)
Testes unitários e o Visual Studio 2013
Criando um novo projeto de testes unitários:
![Page 16: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/16.jpg)
Testes unitários e o Visual Studio 2013
O menu TEST
![Page 17: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/17.jpg)
Testes unitários e o Visual Studio 2013 Executando os testes definidos em uma classe
![Page 18: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/18.jpg)
Testes unitários e o Visual Studio 2013 A janela Test Explorer e o resultado da execução de testes unitários
![Page 19: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/19.jpg)
Testes unitários e o Visual Studio 2013 O uso do framework xUnit.net requer:
◦ A criação de um novo projeto de testes
◦ Referenciar a aplicação que será submetida a testes neste novo projeto
◦ A instalação de packages para a codificação de testes e execução dos mesmos na IDE
◦ A criação de classes que conterão os testes
◦ A definição de métodos para checagens nessas classes de testes, com estes últimos sendo marcados com os atributos “Fact” ou “Theory” e fazendo uso de funções definidas na classe Assert
![Page 20: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/20.jpg)
Testes unitários e o Visual Studio 2013 Packages do xUnit.net em um projeto de testes
(xUnit.net e xUnit.net [Runners])
![Page 21: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/21.jpg)
Testes unitários e o Visual Studio 2013
Um pouco mais sobre a classe Assert:
◦ Definida no namespace Xunit
◦ Caso uma checagem produza como resultado o valor false, considera-se que o teste em questão gerou um erro
◦ Alguns dos métodos disponibilizados por este tipo: Equal, NotEqual, False, True, Null e NotNull
![Page 22: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/22.jpg)
Test-Driven Development
Desenvolvimento baseado na codificação de testes unitários
Abordagem que tem “início” em 2002, com a publicação do livro “Test-Driven Development: By Example” por Kent Beck (“pai” do XP - Extreme Programming)
SUT (“System Under Test”) ou CUT (“Class Under Test” ou “Code Under Test”) → alguns termos comuns dentro de TDD
![Page 23: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/23.jpg)
TDD e a implementação de softwares
Construção de soluções de uma maneira que facilite a integração a ferramentas para a execução de testes unitários
Codificação de testes unitários antes mesmo da implementação das partes que serão submetidas a análises → evitando assim a elaboração de testes “viciados”
![Page 24: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/24.jpg)
Como TDD funciona?
A implementação de uma funcionalidade segue um ciclo conhecido como Red-Green-Refactor (com a execução dos testes unitários em todos os estágios)
![Page 25: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/25.jpg)
Como TDD funciona? → Red
Teste elaborado antes mesmo da funcionalidade ter sido codificada (apenas a estrutura básica foi definida), de forma a se evitar uma verificação “viciada”
Exemplo de definição de classe com funcionalidades ainda não implementadas→
![Page 26: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/26.jpg)
Como TDD funciona? → Red
Teste unitário criado criado com o framework
xUnit.net →
![Page 27: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/27.jpg)
Como TDD funciona? → Green
Funcionalidade codificada da forma mais simples possível, de maneira a garantir a execução com sucesso dos testes
Exemplo anterior comfuncionalidades já implementadas →
![Page 28: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/28.jpg)
Como TDD funciona? → Refactor
Eliminação de instruções duplicadas e eventuais melhorias no código
Exemplo de classerefatorada →
![Page 29: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/29.jpg)
Benefícios em se adotar TDD
Código mais claro, já que os testes são escritos com o objetivo de checar porções menos extensas de um projeto
Testes unitários podem ser encarados como uma forma de se documentar o código → entendimento de como o método ou classe funciona
Um rápido feedback, com a geração de alertas diante de eventuais problemas → algo extremamente importante ao se efetuarem testes de regressão
Uma maior cobertura de diferentes trechos de código, o que poderia não acontecer com outros tipos de testes
Falhas são apontadas durante o desenvolvimento, economizando assim tempo e recursos financeiros
![Page 30: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/30.jpg)
TDD e boas práticas
Ao buscar um código mais simples e de fácil manutenção, a adoção de TDD acaba por favorecer uma melhor assimilação de boas práticas de desenvolvimento/arquitetura de software:
◦ Separação de Responsabilidades (ao isolar a lógica de negócios ou de acesso a dados das camadas de visualização de uma aplicação)
◦ Maior coesão (evitando a implementação de classes “faz-tudo”)
◦ Menor acoplamento (a simplificação do código visando a escrita de testes eficazes contribui para uma menor dependência entre diferentes partes de uma aplicação)
![Page 31: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/31.jpg)
Exemplo de implementação no Visual Studio 2013
Conversão de temperatura – Escala Fahrenheit para Celsius:
Classe a ser criada:
C = (F – 32) / 1,8 Casos de teste (considerar 2 casas decimais para arredondamento):
![Page 32: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/32.jpg)
Exemplo de implementação no Visual Studio 2013
Link para download da solução de exemplo:https://gallery.technet.microsoft.com/Test-Driven-Development-2aad5383
![Page 33: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/33.jpg)
Considerações sobre o Exemplo Implementado
Cada caso de teste possui um método correspondente → duplicação de código (ao menos para este exemplo específico)
Casos de teste adicionais exigirão a implementação de novos métodos para cada situação
![Page 34: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/34.jpg)
Data-Driven Unit Testing
Métodos parametrizados, com a utilização de mecanismos para prover os valores a serem testados
xUnit.net
◦ Métodos marcados com o atributo “Theory”
◦ O atributo “InlineData” é utilizado para a especificação de valores, estando associado a um método de teste
![Page 35: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/35.jpg)
Retomando o Exemplo de Implementação
Ajustando a classe de testes para que utilize os atributos “Theory” e “InlineData” o resultado será:
![Page 36: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/36.jpg)
Testes unitários e o Visual Studio 2015
IntelliTest
◦ Novo recurso que permite a geração automática de casos de testes a partir do Visual Studio 2015
◦ Anteriormente conhecido como “Smart Unit Tests”
![Page 37: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/37.jpg)
Considerações finais
Quando aplicar TDD?
◦ Testando todas as funcionalidades da aplicação, sem exceções?
◦ Considerando apenas funcionalidades mais significativas do ponto de vista do negócio?
![Page 38: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/38.jpg)
Dúvidas, sugestões???
![Page 39: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/39.jpg)
Referências Testes unitários com o framework xUnit.net
http://social.technet.microsoft.com/wiki/pt-br/contents/articles/31395.testes-unitarios-com-o-framework-xunit-net.aspx
Novos recursos do Visual Studio 2015: Smart Unit Testshttp://netcoders.com.br/blog/visual-studio-2015-smart-unit-tests/
Test-Driven Developmenthttp://martinfowler.com/bliki/TestDrivenDevelopment.html
Unit Testhttp://martinfowler.com/bliki/UnitTest.html
![Page 40: Test-Driven Development (TDD) utilizando o framework xUnit.net](https://reader036.vdocuments.site/reader036/viewer/2022062320/55c3fff8bb61eb186e8b4594/html5/thumbnails/40.jpg)
Obrigado!!!