SlideShare una empresa de Scribd logo
1 de 34
Descargar para leer sin conexión
Testes unitários como ferramentas de
design de código
I GruPy Grande Rio - 2 de abril de 2016
Paula Grangeiro
Programadora por profissão,
desenhista nas horas vagas e
colecionadora de gatos.
Sobre mim
Ministério da procrastinação adverte:
Os fatos relatados durante esta apresentação são
baseados em experiências pessoais.
Utilize-os com moderação.
Por que pensar em
Design de Código?
Código Mogwai
“Escrever código limpo é o que você deve
fazer para que possa se intitular como
profissional. Não existem desculpas
plausíveis para fazer menos do que o
seu melhor.” - Uncle Bob em Código Limpo
Testes unitários
def foo(arg):
if arg:
return ‘It has an argument!’
return ‘Nope!’
Pequena função Python com dois
possíveis fluxos a partir da
validação do argumento
Testes unitários que cobrem os
possíveis fluxos da função foo
class FooTestCase(TestCase):
def test_foo_returns_correct_value_when_arg_is_true(self):
message = foo(True)
self.assertEqual(‘It has an argument!’, message)
def test_foo_returns_correct_value_when_arg_is_false(self):
message = foo(False)
self.assertEqual(‘Nope!’, message)
class FooTestCase(TestCase):
def test_foo_returns_correct_value_when_arg_is_true(self):
message = foo(True)
self.assertEqual(‘It has an argument!’, message)
def test_foo_returns_correct_value_when_arg_is_false(self):
message = foo(False)
self.assertEqual(‘Nope!’, message)
def foo(arg):
if arg:
return ‘It has an argument!’
return ‘Nope!’
Então o que há de errado com o nosso código?
Padrões de Projeto
Design Patterns
Padrões de
Projeto
● GoF
● GRASP
● SOLID
Indicação de estudo
● Padrões de Projeto - Soluções Reutilizáveis de Software Orientado a Objetos
● Utilizando UML e Padrões
● Código limpo
● Curso Python Patterns - Luciano Ramalho
Testes unitários como ferramenta
de design
class CrateIncomeTaxTestCase(TestCase):
def test_method_calcs_exemption_corrctly
(self):
```
teste para rendimento < 25661.7
```
def test_method_calcs_taxes_correctly(self):
```
teste para rendimento > 25661.7
```
def test_method_creates_file_correctly(self):
```
teste que valida criacao do arquivo
```
Teste unitariamente o seu código
def create_income_tax(income):
tax = 0
if income < 25661.7:
```
codigo calculo do imposto isento
```
else:
```
codigo calculo do imposto
```
f = open('income_tax_file', 'w')
f.write(tax)
f.close()
class CreateIncomeTaxTestCase(TestCase):
def test_method_calls_calculate_tax(self):
```
teste para chamada do calcular imposto
```
def test_method_calls_create_file(self):
```
teste para chamada do criar arquivo
```
class CalculateTaxTestCase(TestCase):
def test_method_calcs_exemption_correctly
(self):
```
teste para rendimento < 25661.7
```
def test_method_calcs_taxes_correctly(self):
```
teste para rendimento >= 25661.7
```
class CreateFileTestCase(TestCase):
def test_method_creates_file_correctly(self):
```
teste que valida criacao do arquivo
```
Teste unitariamente o seu código
def create_income_tax(rendimento):
tax = calculate_tax(rendimento)
income_tax_file = create_file(valor_imposto)
class PatientTestCase(TestCase):
def test_save_patient_correctly(self):
```
codigo que testa se o paciente foi salvo corretamente
```
def test_save_raises_exception_if_patient_with_same_cpf_already_exists(self):
```
codigo que testa se foi levantada excecao quando paciente com cpf ja existe
```
patient_1 = Patient(cpf=’12121212108’)
patient_1.save()
patient_2 = Patient(cpf=’12121212108’)
self.assertRaises(PatientAlreadyExistsException, patient_2.save)
Teste fluxos de sucesso e erro separadamente
class CalculateTaxTestCase(TestCase):
def test_method_calcs_taxes_when_income_less_than_margin(self):
expected_value = 0
income = 25000
taxes = calculate_tax(income)
self.assertEqual(expected_value, taxes)
def test_method_calcs_taxes_when_income_equal_or_greater_than_margin(self):
expected_value = 432.6
income = 26000
taxes = calculate_tax(income)
self.assertEqual(expected_value, taxes)
Nomeie os testes de acordo com o fluxo testado
from mock import patch
from unittest import TestCase
from diretorio.arquivo import create_income_tax
class CreateIncomeTaxTestCase(TestCase):
@patch(‘diretorio.arquivo.calculate_tax’)
def test_method_calls_calculate_tax(self, mocked_calculate_tax):
create_income_tax(1)
self.assertTrue(mocked_calculate_tax.called)
@patch(‘diretorio.arquivo.create_file’)
def test_method_calls_create_file(self, mocked_create_file):
create_income_tax(1)
self.assertTrue(mocked_create_file.called)
Testes devem ser isolados!
TDD
Funcionamento do Dojo
● DTM todas as quartas
● Colworking todas as segundas
● dojo-rio@googlegroups.com
Dojos no Rio
http://www.paulagrangeiro.com.br
https://twitter.com/paulagrangeiro
http://fb.me/paula.grangeiro
https://github.com/pgrangeiro
pgrangeiro.dev@gmail.com
Obrigada!

Más contenido relacionado

La actualidad más candente

Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2PeslPinguim
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019Cassio Santos
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de softwarericardophp
 
Django Channels - Aplicações real time com Django
Django Channels - Aplicações real time com DjangoDjango Channels - Aplicações real time com Django
Django Channels - Aplicações real time com DjangoPaula Grangeiro
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Luís Cobucci
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.netAndre Nascimento
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em PhpAlmir Mendes
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Maellson Marques
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
Poo1   aula 3 - java - comentários instruções e blocos-palavras chavePoo1   aula 3 - java - comentários instruções e blocos-palavras chave
Poo1 aula 3 - java - comentários instruções e blocos-palavras chaveDenis Sobrenome
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 
Testes de integração em microservices
Testes de integração em microservicesTestes de integração em microservices
Testes de integração em microservicesClaudenir Freitas
 
Curso de C# - Introdução
Curso de C# - IntroduçãoCurso de C# - Introdução
Curso de C# - IntroduçãoDaniel Araújo
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPressRudá Almeida
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-phpdiogoa21
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 

La actualidad más candente (20)

Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 
O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019O futuro do elephante: as promessas do php para 2019
O futuro do elephante: as promessas do php para 2019
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
PHPUnit e teste de software
PHPUnit e teste de softwarePHPUnit e teste de software
PHPUnit e teste de software
 
Django Channels - Aplicações real time com Django
Django Channels - Aplicações real time com DjangoDjango Channels - Aplicações real time com Django
Django Channels - Aplicações real time com Django
 
Pep8 pylint
Pep8 pylintPep8 pylint
Pep8 pylint
 
Pylint
PylintPylint
Pylint
 
Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011Testes de unidade e TDD SoLiSC 2011
Testes de unidade e TDD SoLiSC 2011
 
Apostila de Introdução ao C#.net
Apostila de Introdução ao C#.netApostila de Introdução ao C#.net
Apostila de Introdução ao C#.net
 
10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php10+ Coisas Que Odeio Em Php
10+ Coisas Que Odeio Em Php
 
Como Construir um Compilador cap-1
Como Construir um Compilador cap-1Como Construir um Compilador cap-1
Como Construir um Compilador cap-1
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
Poo1   aula 3 - java - comentários instruções e blocos-palavras chavePoo1   aula 3 - java - comentários instruções e blocos-palavras chave
Poo1 aula 3 - java - comentários instruções e blocos-palavras chave
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 
Testes de integração em microservices
Testes de integração em microservicesTestes de integração em microservices
Testes de integração em microservices
 
Curso de C# - Introdução
Curso de C# - IntroduçãoCurso de C# - Introdução
Curso de C# - Introdução
 
1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress1001 maneiras de debugar o WordPress
1001 maneiras de debugar o WordPress
 
Manual-de-php
Manual-de-phpManual-de-php
Manual-de-php
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
Microsoft C#
Microsoft C#Microsoft C#
Microsoft C#
 

Destacado

Неслышащий да увидит
Неслышащий да увидитНеслышащий да увидит
Неслышащий да увидитMoscow Digital
 
Project Experience3
Project Experience3Project Experience3
Project Experience3ajith k
 
Europe changes the world magazine assignment
Europe changes the world   magazine assignmentEurope changes the world   magazine assignment
Europe changes the world magazine assignmentHeatherP
 
TO Mentor Training
TO Mentor TrainingTO Mentor Training
TO Mentor Trainingjanestrohm
 
Stratégie Responsabilité Sociétale des Entreprises (RSE) et marchés publics
Stratégie Responsabilité Sociétale des Entreprises (RSE) et marchés publics Stratégie Responsabilité Sociétale des Entreprises (RSE) et marchés publics
Stratégie Responsabilité Sociétale des Entreprises (RSE) et marchés publics Frédéric Grevey
 
Literacy rate and culture no whatch saying
Literacy rate and culture  no whatch sayingLiteracy rate and culture  no whatch saying
Literacy rate and culture no whatch sayingmarypardee
 
Eurpean Exploration And Empire Building
Eurpean Exploration And Empire BuildingEurpean Exploration And Empire Building
Eurpean Exploration And Empire BuildingHeatherP
 
Office365 groups from the ground up - SPTechCon Boston
Office365 groups from the ground up - SPTechCon BostonOffice365 groups from the ground up - SPTechCon Boston
Office365 groups from the ground up - SPTechCon BostonDrew Madelung
 
How to conduct an anti-money laundering (AML) system assessment
How to conduct an anti-money laundering (AML) system assessmentHow to conduct an anti-money laundering (AML) system assessment
How to conduct an anti-money laundering (AML) system assessmentKeith Furst
 
Projet pilote office 365
Projet pilote office 365Projet pilote office 365
Projet pilote office 365Odile Dupont
 

Destacado (20)

Неслышащий да увидит
Неслышащий да увидитНеслышащий да увидит
Неслышащий да увидит
 
Project Experience3
Project Experience3Project Experience3
Project Experience3
 
Europe changes the world magazine assignment
Europe changes the world   magazine assignmentEurope changes the world   magazine assignment
Europe changes the world magazine assignment
 
Portfolio Samples
Portfolio SamplesPortfolio Samples
Portfolio Samples
 
2016 West Region Accounting Meeting
2016 West Region Accounting Meeting2016 West Region Accounting Meeting
2016 West Region Accounting Meeting
 
Lantana Reserve
Lantana ReserveLantana Reserve
Lantana Reserve
 
THE COTTON ROAD - FOLDER
THE COTTON ROAD - FOLDERTHE COTTON ROAD - FOLDER
THE COTTON ROAD - FOLDER
 
TO Mentor Training
TO Mentor TrainingTO Mentor Training
TO Mentor Training
 
Asia lr survey for sharing
Asia lr survey for sharingAsia lr survey for sharing
Asia lr survey for sharing
 
Stratégie Responsabilité Sociétale des Entreprises (RSE) et marchés publics
Stratégie Responsabilité Sociétale des Entreprises (RSE) et marchés publics Stratégie Responsabilité Sociétale des Entreprises (RSE) et marchés publics
Stratégie Responsabilité Sociétale des Entreprises (RSE) et marchés publics
 
Literacy rate and culture no whatch saying
Literacy rate and culture  no whatch sayingLiteracy rate and culture  no whatch saying
Literacy rate and culture no whatch saying
 
數位廣告媒體企劃與配置Part 1
數位廣告媒體企劃與配置Part 1數位廣告媒體企劃與配置Part 1
數位廣告媒體企劃與配置Part 1
 
La responsabilité sociale et environnementale des entreprises
La responsabilité sociale et environnementale des entreprisesLa responsabilité sociale et environnementale des entreprises
La responsabilité sociale et environnementale des entreprises
 
Eurpean Exploration And Empire Building
Eurpean Exploration And Empire BuildingEurpean Exploration And Empire Building
Eurpean Exploration And Empire Building
 
【MMdc 分享】消費行為分析_SmartM 電子商務行銷X開店菁英班
【MMdc 分享】消費行為分析_SmartM 電子商務行銷X開店菁英班【MMdc 分享】消費行為分析_SmartM 電子商務行銷X開店菁英班
【MMdc 分享】消費行為分析_SmartM 電子商務行銷X開店菁英班
 
Office365 groups from the ground up - SPTechCon Boston
Office365 groups from the ground up - SPTechCon BostonOffice365 groups from the ground up - SPTechCon Boston
Office365 groups from the ground up - SPTechCon Boston
 
How to conduct an anti-money laundering (AML) system assessment
How to conduct an anti-money laundering (AML) system assessmentHow to conduct an anti-money laundering (AML) system assessment
How to conduct an anti-money laundering (AML) system assessment
 
Projet pilote office 365
Projet pilote office 365Projet pilote office 365
Projet pilote office 365
 
UDP Report
UDP ReportUDP Report
UDP Report
 
Esprit et Conscience (French)
Esprit et Conscience (French)Esprit et Conscience (French)
Esprit et Conscience (French)
 

Similar a Testes unitários como ferramentas de design de código

TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislAdriano Petrich
 
Integração continua sem traumas
Integração continua sem traumasIntegração continua sem traumas
Integração continua sem traumassabrinajn
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Michael Castillo Granados
 
S2 b desenvolvimento de sistemas [reparado]
S2 b   desenvolvimento de sistemas [reparado]S2 b   desenvolvimento de sistemas [reparado]
S2 b desenvolvimento de sistemas [reparado]Milena Rebouças
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaGiovanni Bassi
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013Giovanni Bassi
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesEverton Rodrigues
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...JP Clementi
 
Criação de aplicações web com python
Criação de aplicações web com pythonCriação de aplicações web com python
Criação de aplicações web com pythonHelder Vieira
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
Como estruturar seus testes com jasmine e karma
Como estruturar seus testes com jasmine e karmaComo estruturar seus testes com jasmine e karma
Como estruturar seus testes com jasmine e karmaEnrique Marques Junior
 

Similar a Testes unitários como ferramentas de design de código (20)

Testes de software de A a Z
Testes de software de A a ZTestes de software de A a Z
Testes de software de A a Z
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fisl
 
Integração continua sem traumas
Integração continua sem traumasIntegração continua sem traumas
Integração continua sem traumas
 
Frameworks para C 3º DeSif
Frameworks para C 3º DeSifFrameworks para C 3º DeSif
Frameworks para C 3º DeSif
 
Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014Código legado - PHP Conference Brasil - 2014
Código legado - PHP Conference Brasil - 2014
 
Python 08
Python 08Python 08
Python 08
 
S2 b desenvolvimento de sistemas [reparado]
S2 b   desenvolvimento de sistemas [reparado]S2 b   desenvolvimento de sistemas [reparado]
S2 b desenvolvimento de sistemas [reparado]
 
C#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variânciaC#4 - Parte 2 - COM interop e variância
C#4 - Parte 2 - COM interop e variância
 
Testes em go
Testes em goTestes em go
Testes em go
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
TypeScript - Campus party 2013
TypeScript - Campus party 2013TypeScript - Campus party 2013
TypeScript - Campus party 2013
 
Padrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por TestesPadrões para Desenvolvimento de Software Guiado por Testes
Padrões para Desenvolvimento de Software Guiado por Testes
 
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
TechEd Brasil 2010 - Dicas, truques do Visual Studio 2010 e novas funcionalid...
 
Apresentação PhpDescribe
Apresentação PhpDescribeApresentação PhpDescribe
Apresentação PhpDescribe
 
Criação de aplicações web com python
Criação de aplicações web com pythonCriação de aplicações web com python
Criação de aplicações web com python
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Como estruturar seus testes com jasmine e karma
Como estruturar seus testes com jasmine e karmaComo estruturar seus testes com jasmine e karma
Como estruturar seus testes com jasmine e karma
 

Testes unitários como ferramentas de design de código