SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Downloaden Sie, um offline zu lesen
Python com TDD
  Código Python testado Pragmaticamente




IV Encontro do PUG-PE
Sobre Rodrigo Alves Vieira

 * Recife, Pernambuco
 * Programador Ruby há mais de um ano
 * Pythonista fase beta
 * Ama Rock 'n roll, Indie e Blues :D
 * rodrigo3n.heroku.com
 * github.com/rodrigo3n
 * @rodrigo3n
Começo de conversa...

   Programadores de qualquer linguagem
precisam de Frameworks e Suítes de Testes
   Automatizados (De preferência!) , pra
assegurar o funcionamento apropriado do
   código, seja ele de um aplicativo em
 produção ou uma biblioteca Open Source. 
O Python tem o:

unittest
 O unittest - também chamado de PyUnit
-  é um Framework built-in do Python de
Testes Unitários, baseado no JUnit(Java)
 de Erich Gamma e no Smalltalk Testing
   Framework do Kent Beck(O cara que
        idealizou o TDD em 1999).

  Criado em 2001 por Steve Purcell está
com o Python desde a versão 2.1 em sua
           biblioteca padrão.
Vantagens
 *   É uma biblioteca padrão do Python.
 *   É muito prática. Curva mínima de aprendizado.
 *   Está presente em todas as implementações da Linguagem.
 *   É útil pra qualquer projeto Python!
Composto por 3 classes
         principais 

* TestCase
* TestSuite
* TextTestRunner
 
Pilares do Framework
* TestCase
    Providencia métodos próprios (assertEqual,
    assertTrue, assertNotEqual) que geram mensagens
    mais precisas pra os testes.
 
*  TestSuite
*  TextTestRunner
Pilares do Framework
*  TestCase
* TestSuite
    É um agregador de testes, classe poderosa que pode
    mesclar vários testes de diferentes módulos e
    executá-los como um todo. 

 * TextTestRunner
Pilares do Framework
*  TestCase
*  TestSuite
* TextTestRunner
 
    Mostra os nomes dos testes conforme eles são
    executados, assim como os erros ocorridos. E um
    resumo dos resultados no fim da execução
Comece testando o código
   que você quer ter!
unittest.TestCase




que obviamente....
Falha!
Completamos o primeiro passo do
ciclo do TDD: Escrevemos um teste
que especifica como queremos o
código funcionando.

Agora escreveremos apenas código
suficiente pra fazer o código passar!
Ready.... Go!
Fizemos o primeiro teste passar...




Agora vem a.... 
Refatoração
Aqui pensamos
atensiosamente no que
os testes estão fazendo.
Melhoramos a qualidade
 do código fonte e seu
   teste e removemos
       duplicação. 
Dica!
Execute os testes com o argumento
      "-v" e veja o resultado
  individualizado de cada teste!


   ~% python teste_aviao.py -v
Dica!
  Execute testes específicos interativamente!
       Digamos que o arquivo que contém os testes
        (test_aviao.py) tem 40 testes, mas você só
               quer executar 2 deles, então:


~% python test_aviao.py testeAviao.test_aviao_criado testeAviao.test_motor
unittest.TestSuite
   Uma ferramenta incrível pra
    agrupar testes individuais e
organizar "pilhas" de testes, mesmo
em diferentes arquivos e módulos,
     criando Suites de Teste.
Criando uma suíte de testes




 Ou ainda melhor.....
A classe TestSuite torna ainda mais poderosa sua suíte de
testes porque você pode importar quantos módulos você
  quiser contendo uma quantidade qualquer de testes.

Então você pode aninhá-los pra dinamizar a execução...
Quando eu disse aninhá-los eu disse que você
  pode aninhar até outras suítes de teste!




Um suíte de testes que executa outras suítes
         de testes.. hmmm. massa!
unittest.TextTestRunner

Naturalmente, testes são documentação
também, então, nada mais legal do que
  tê-los disponíveis como texto puro!
Bom, é isso que o TextTestRunner faz cada vez que o
  invocamos com "unittest.main()" no final do arquivo
                    test_aviao.py! 

 unittest.main() gera um objeto TestSuite que contém
    todos os testes que começam com "test" (como
  testAviaoCriado() por exemplo), então ele invoca o
TextTestRunner que executa cada um desses métodos e
  manda o resultado pra o desenvolvedor via stderr!
Nossa suíte final de testes 
O Resultado
Mais informações:

help(unittest)
Isso é tudo pessoal!



          Dúvidas?!
          Opiniões?!
twitter: @rodrigo3n | rodrigo3n@gmail.com
http://rodrigo3n.heroku.com | 
http://bit.ly/python-com-tdd

Weitere ähnliche Inhalte

Was ist angesagt?

PHPSP TestFest 2010
PHPSP TestFest 2010PHPSP TestFest 2010
PHPSP TestFest 2010Rafael Dohms
 
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
 
Manual do Kubuntu
Manual do KubuntuManual do Kubuntu
Manual do KubuntuDavi Neves
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoPaula Grangeiro
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonGiancarlo Silva
 
Descomplicando os mocks - pyse
Descomplicando os mocks - pyseDescomplicando os mocks - pyse
Descomplicando os mocks - pyseDouglas Bastos
 
Java recursos avançados - filters
Java   recursos avançados - filtersJava   recursos avançados - filters
Java recursos avançados - filtersArmando Daniel
 
Palestra Linux Survival Kit para PHPeiros
Palestra Linux Survival Kit para PHPeirosPalestra Linux Survival Kit para PHPeiros
Palestra Linux Survival Kit para PHPeirosLeonardo Tumadjian
 
Test Driven Infrastructure na Globo.com
Test Driven Infrastructure na Globo.comTest Driven Infrastructure na Globo.com
Test Driven Infrastructure na Globo.comRogério Schneider
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoPaula Grangeiro
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...Rogério Moraes de Carvalho
 

Was ist angesagt? (19)

PHPSP TestFest 2010
PHPSP TestFest 2010PHPSP TestFest 2010
PHPSP TestFest 2010
 
Pythonbrew
PythonbrewPythonbrew
Pythonbrew
 
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
 
Thread Java
Thread JavaThread Java
Thread Java
 
Manual do Kubuntu
Manual do KubuntuManual do Kubuntu
Manual do Kubuntu
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
PHPBR TestFest
PHPBR TestFestPHPBR TestFest
PHPBR TestFest
 
Estrutura de repetição
Estrutura de repetiçãoEstrutura de repetição
Estrutura de repetição
 
Aula java[1]
Aula java[1]Aula java[1]
Aula java[1]
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
Seminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem PythonSeminário - Guido van Rossum: Breve história da linguagem Python
Seminário - Guido van Rossum: Breve história da linguagem Python
 
Descomplicando os mocks - pyse
Descomplicando os mocks - pyseDescomplicando os mocks - pyse
Descomplicando os mocks - pyse
 
Reuse release equivalence principle
Reuse release equivalence principleReuse release equivalence principle
Reuse release equivalence principle
 
Java recursos avançados - filters
Java   recursos avançados - filtersJava   recursos avançados - filters
Java recursos avançados - filters
 
Palestra Linux Survival Kit para PHPeiros
Palestra Linux Survival Kit para PHPeirosPalestra Linux Survival Kit para PHPeiros
Palestra Linux Survival Kit para PHPeiros
 
Test Driven Infrastructure na Globo.com
Test Driven Infrastructure na Globo.comTest Driven Infrastructure na Globo.com
Test Driven Infrastructure na Globo.com
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
Resumo OpenMP
Resumo OpenMPResumo OpenMP
Resumo OpenMP
 

Ähnlich wie Python com TDD

Ähnlich wie Python com TDD (20)

Coding Dojo e Test Driven Development
Coding Dojo e Test Driven DevelopmentCoding Dojo e Test Driven Development
Coding Dojo e Test Driven Development
 
Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2Talk sobre testes automatizados. Parte 1/2
Talk sobre testes automatizados. Parte 1/2
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
JUnit
JUnitJUnit
JUnit
 
Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Java 12
Java 12Java 12
Java 12
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Android Aula 4
Android Aula 4Android Aula 4
Android Aula 4
 
Robot Framework - principais características
Robot Framework - principais característicasRobot Framework - principais características
Robot Framework - principais características
 
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
 
TDD (Resumo)
TDD (Resumo)TDD (Resumo)
TDD (Resumo)
 
Entrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuidaEntrega contínua com arquitetura distribuida
Entrega contínua com arquitetura distribuida
 
J unit xp
J unit xpJ unit xp
J unit xp
 
Desenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por TestesDesenvolvimento Guiado Por Testes
Desenvolvimento Guiado Por Testes
 
JUnit Sample
JUnit SampleJUnit Sample
JUnit Sample
 
Testes de Unidade com Junit
Testes de Unidade com JunitTestes de Unidade com Junit
Testes de Unidade com Junit
 
Introdução a tdd
Introdução a tddIntrodução a tdd
Introdução a tdd
 
Testando Aplicações com PHPT
Testando Aplicações com PHPTTestando Aplicações com PHPT
Testando Aplicações com PHPT
 
Introdução ao Maven
Introdução ao MavenIntrodução ao Maven
Introdução ao Maven
 

Python com TDD

  • 1. Python com TDD Código Python testado Pragmaticamente IV Encontro do PUG-PE
  • 2. Sobre Rodrigo Alves Vieira  * Recife, Pernambuco * Programador Ruby há mais de um ano * Pythonista fase beta * Ama Rock 'n roll, Indie e Blues :D * rodrigo3n.heroku.com * github.com/rodrigo3n * @rodrigo3n
  • 3. Começo de conversa...   Programadores de qualquer linguagem precisam de Frameworks e Suítes de Testes Automatizados (De preferência!) , pra assegurar o funcionamento apropriado do código, seja ele de um aplicativo em produção ou uma biblioteca Open Source. 
  • 4. O Python tem o: unittest
  • 5.
  • 6.  O unittest - também chamado de PyUnit -  é um Framework built-in do Python de Testes Unitários, baseado no JUnit(Java) de Erich Gamma e no Smalltalk Testing Framework do Kent Beck(O cara que idealizou o TDD em 1999).  Criado em 2001 por Steve Purcell está com o Python desde a versão 2.1 em sua biblioteca padrão.
  • 7. Vantagens  * É uma biblioteca padrão do Python.  * É muito prática. Curva mínima de aprendizado.  * Está presente em todas as implementações da Linguagem.  * É útil pra qualquer projeto Python!
  • 8. Composto por 3 classes principais  * TestCase * TestSuite * TextTestRunner  
  • 9. Pilares do Framework * TestCase Providencia métodos próprios (assertEqual, assertTrue, assertNotEqual) que geram mensagens mais precisas pra os testes.   *  TestSuite *  TextTestRunner
  • 10. Pilares do Framework *  TestCase * TestSuite   É um agregador de testes, classe poderosa que pode mesclar vários testes de diferentes módulos e executá-los como um todo.   * TextTestRunner
  • 11. Pilares do Framework *  TestCase *  TestSuite * TextTestRunner   Mostra os nomes dos testes conforme eles são executados, assim como os erros ocorridos. E um resumo dos resultados no fim da execução
  • 12. Comece testando o código que você quer ter!
  • 15. Completamos o primeiro passo do ciclo do TDD: Escrevemos um teste que especifica como queremos o código funcionando. Agora escreveremos apenas código suficiente pra fazer o código passar!
  • 17. Fizemos o primeiro teste passar... Agora vem a.... 
  • 19. Aqui pensamos atensiosamente no que os testes estão fazendo. Melhoramos a qualidade do código fonte e seu teste e removemos duplicação. 
  • 20.
  • 21. Dica! Execute os testes com o argumento "-v" e veja o resultado individualizado de cada teste! ~% python teste_aviao.py -v
  • 22. Dica! Execute testes específicos interativamente! Digamos que o arquivo que contém os testes (test_aviao.py) tem 40 testes, mas você só quer executar 2 deles, então: ~% python test_aviao.py testeAviao.test_aviao_criado testeAviao.test_motor
  • 23. unittest.TestSuite Uma ferramenta incrível pra agrupar testes individuais e organizar "pilhas" de testes, mesmo em diferentes arquivos e módulos, criando Suites de Teste.
  • 24. Criando uma suíte de testes Ou ainda melhor.....
  • 25. A classe TestSuite torna ainda mais poderosa sua suíte de testes porque você pode importar quantos módulos você quiser contendo uma quantidade qualquer de testes. Então você pode aninhá-los pra dinamizar a execução...
  • 26. Quando eu disse aninhá-los eu disse que você pode aninhar até outras suítes de teste! Um suíte de testes que executa outras suítes de testes.. hmmm. massa!
  • 27. unittest.TextTestRunner Naturalmente, testes são documentação também, então, nada mais legal do que tê-los disponíveis como texto puro!
  • 28. Bom, é isso que o TextTestRunner faz cada vez que o invocamos com "unittest.main()" no final do arquivo test_aviao.py!  unittest.main() gera um objeto TestSuite que contém todos os testes que começam com "test" (como testAviaoCriado() por exemplo), então ele invoca o TextTestRunner que executa cada um desses métodos e manda o resultado pra o desenvolvedor via stderr!
  • 29. Nossa suíte final de testes 
  • 32. Isso é tudo pessoal! Dúvidas?! Opiniões?! twitter: @rodrigo3n | rodrigo3n@gmail.com http://rodrigo3n.heroku.com |  http://bit.ly/python-com-tdd