SlideShare ist ein Scribd-Unternehmen logo
1 von 36
Qualidade no desenvolvimento de Software com PHPUnit
Roteiro ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Introdução ,[object Object],[object Object],[object Object]
Motivações ,[object Object],[object Object],[object Object],[object Object],[object Object]
Motivações ,[object Object]
Motivações ,[object Object],[object Object],[object Object],[object Object]
O PHPUnit ,[object Object],[object Object],[object Object],[object Object]
O PHPUnit ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Instalação $ wget http://pear.phpunit.de/get/PHPUnit-3.2.2.tgz $ tar zxf PHPUnit-3.2.2.tgz $ cd PHPUnit-3.2.2 $ mv pear-phpunit phpunit $ cd .. $ cp -fR PHPUnit-3.2.2 /opt/ $ cd /opt $ ln -s PHPUnit-3.2.2/ phpunit $ vi /opt/phpunit/phpunit #!  @php_bin@  -d safe_mode=Off #!  /usr/bin/php  -d safe_mode=Off <--substituir @php_bin@ $ chmod +x /opt/phpunit/phpunit
Prática No PHP $ vi /usr/local/php5/lib/php.ini include_path = &quot;.: /opt/phpunit &quot;
TextUI TestRunner
Nosso primeiro teste ,[object Object],<?php class   Calculadora { public   function   somar( $arg1 ,   $arg2 )‏ { return   $arg1   +   $arg2 ; } } Classe que testaremos Criaremos um teste para afirmar que o método Calculadora::somar() realmente soma corretamente os dois argumentos passados
Nosso primeiro teste ,[object Object],<?php require_once ( 'PHPUnit/Framework/TestCase.php' ); require_once ( 'Calculadora.php' ); class   CalculadoraTest   extends   PHPUnit_Framework_TestCase { public   function  testS omar()‏ { $calculadora   =   new   Calculadora(); $resultado   =   $calculadora ->somar( 5 ,   3 ); $this ->assertEquals( 8 ,   $resultado ); } } Classes de teste devem estender a classe PHPUnit_Framework_TestCase método que ira testar a soma
Nosso primeiro teste $ phpunit <TestCase> $ phpunit <TestCase> <Arquivo>
Entendendo a execução ,[object Object],[object Object],[object Object],[object Object],[object Object]
setUp e tearDown class   LinkedListTest   extends   PHPUnit_Framework_TestCase { private   $dados ; protected   function   setUp() { parent ::setUp(); $this ->dados   =   array ( &quot;PHP&quot; ,   &quot;Java&quot; ,   &quot;Ruby&quot; ,   &quot;Python&quot; ); } protected   function   tearDown() { parent ::tearDown(); $this ->dados   =   null; } }
PHPUnit_Framework_Assert ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
PHPUnit_Framework_Assert ,[object Object],[object Object],[object Object],[object Object]
Skeleton
Skeleton <?php class   Calculadora   { /**   *   * @assert (2,3) == 5   */ public   function   somar   (   $arg1   ,   $arg2   )   { return   $arg1   +   $arg2   ; } /**   *   * @assert (10,2) == 8   * @assert (12,2) == 10   * @assert (100,97) == 3   * @assert (5,3) == 2   */ public   function   subtrair   (   $arg1   ,   $arg2   )   { return   $arg1   -   $arg2   ; } }
Organizando seus testes Application/ Package/ Class (Application/Package/Class.php) ... ... ... Tests/ AllTests.php Package/ Package_AllTests.php ClassTest (Application/Tests/Package/ClassTest.php)
Organizando seus testes <?php require_once ( 'PHPUnit/Framework/TestSuite.php' ); /** * inclue suites de testes que estão em um nível inferior */ require_once (dirname(__FILE__). '/Lista/AllTests.php' ); /** * inclue classes de teste no mesmo diretório */ require_once (dirname(__FILE__). '/CalculadoraTest.php' ); class   AllTests { public   static   function   suite() { $suite   =   new   PHPUnit_Framework_TestSuite( 'PHP Conference' ); $suite ->addTest(Lista_AllTests::suite()); $suite ->addTestSuite( &quot;CalculadoraTest&quot; ); return   $suite ; } }
Organizando seus testes <?php require_once   ( 'PHPUnit/Framework/TestSuite.php' )   ; require_once   (dirname   (   __FILE__   )   .   '/LinkedListTest.php' )   ; class   Lista_AllTests   extends   PHPUnit_Framework_TestSuite   { protected   function   setUp   ()   { //-- criando ambiente } public   static   function   suite   ()   { $suite   =   new   PHPUnit_Framework_TestSuite   (   'PHP Conference - Listas'   )   ; $suite ->addTestSuite   (   'LinkedListTest'   )   ; return   $suite   ; } protected   function   tearDown   ()   { //-- desfazendo ambiente } }
Code Coverage ,[object Object],[object Object],[object Object]
Code Coverage ,[object Object],$ phpunit --coverage-html ./code_coverage AllTests.php
Code Coverage
Code Coverage
Integração Contínua ,[object Object],[object Object]
Integração Contínua
Integração Contínua
Integração Contínua
Integração Contínua
Desenvolvimento Orientado a Testes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Perguntas?
Links ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Obrigado!!!

Weitere ähnliche Inhalte

Was ist angesagt?

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
 
Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Diego Pacheco
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Bernardo Fontes
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Djangofabiocerqueira
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoRafael Jaques
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comandogarux
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - SubalgoritmosCarlos Santos
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de SoftwareMaurício Aniche
 
Oficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptOficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptRaphael Donaire Albino
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizadosThiago Ghisi
 
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
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Webdiogoa21
 

Was ist angesagt? (20)

TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 
Zephir
ZephirZephir
Zephir
 
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
 
Rumo à Certificação PHP
Rumo à Certificação PHPRumo à Certificação PHP
Rumo à Certificação PHP
 
Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?Testando Aplicações Django: Quando, Como e Onde?
Testando Aplicações Django: Quando, Como e Onde?
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Django
 
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de ComandoPHP na Tela Escura: Aplicações Poderosas em Linha de Comando
PHP na Tela Escura: Aplicações Poderosas em Linha de Comando
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
TDD com Python
TDD com PythonTDD com Python
TDD com Python
 
Desenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de ComandoDesenvolvimento Rápido de Programas Linha de Comando
Desenvolvimento Rápido de Programas Linha de Comando
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Pep8 pylint
Pep8 pylintPep8 pylint
Pep8 pylint
 
Oficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScriptOficina de Web Design Lecom - PHP e JavaScript
Oficina de Web Design Lecom - PHP e JavaScript
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
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...
 
M5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-WebM5-Desenvolvimento-Paginas-Web
M5-Desenvolvimento-Paginas-Web
 

Ähnlich wie Qualidade no desenvolvimento de software com PHPUnit

Testes de unidade na prática
Testes de unidade na práticaTestes de unidade na prática
Testes de unidade na práticaTiago Furtado
 
PHPSP TestFest 2009
PHPSP TestFest 2009PHPSP TestFest 2009
PHPSP TestFest 2009Rafael Dohms
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
Testes de regressão automatizados
Testes de regressão automatizadosTestes de regressão automatizados
Testes de regressão automatizadosCristian R. Silva
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Claudinei Brito Junior
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkMarcelo Rodrigo
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009silva.edgar
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkPablo Dall'Oglio
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTAutomação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTelliando dias
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOLgrupoweblovers
 

Ähnlich wie Qualidade no desenvolvimento de software com PHPUnit (20)

Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
Testes de unidade na prática
Testes de unidade na práticaTestes de unidade na prática
Testes de unidade na prática
 
PHPSP TestFest 2009
PHPSP TestFest 2009PHPSP TestFest 2009
PHPSP TestFest 2009
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
Hello SAFE World!!!
Hello SAFE World!!!Hello SAFE World!!!
Hello SAFE World!!!
 
Testes de regressão automatizados
Testes de regressão automatizadosTestes de regressão automatizados
Testes de regressão automatizados
 
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
Minicurso - Técnicas de Teste e Automatização do Teste de Unidade XII SemanaT...
 
Desenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana frameworkDesenvolvimento ágil com Kohana framework
Desenvolvimento ágil com Kohana framework
 
Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009Zend Framework - PHPSP - 2009
Zend Framework - PHPSP - 2009
 
Doctrine for dummies
Doctrine for dummiesDoctrine for dummies
Doctrine for dummies
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
JUnit
JUnitJUnit
JUnit
 
Programando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um FrameworkProgramando para programadores: Desafios na evolução de um Framework
Programando para programadores: Desafios na evolução de um Framework
 
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
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Testes com JUnit
Testes com JUnitTestes com JUnit
Testes com JUnit
 
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANTAutomação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
Automação no ambientAutomação no ambiente de desenvolvimento com Maven e ANT
 
Play Framework - FLISOL
Play Framework - FLISOLPlay Framework - FLISOL
Play Framework - FLISOL
 
Frameworks para C 3º DeSif
Frameworks para C 3º DeSifFrameworks para C 3º DeSif
Frameworks para C 3º DeSif
 

Qualidade no desenvolvimento de software com PHPUnit

  • 1. Qualidade no desenvolvimento de Software com PHPUnit
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9. Instalação $ wget http://pear.phpunit.de/get/PHPUnit-3.2.2.tgz $ tar zxf PHPUnit-3.2.2.tgz $ cd PHPUnit-3.2.2 $ mv pear-phpunit phpunit $ cd .. $ cp -fR PHPUnit-3.2.2 /opt/ $ cd /opt $ ln -s PHPUnit-3.2.2/ phpunit $ vi /opt/phpunit/phpunit #! @php_bin@ -d safe_mode=Off #! /usr/bin/php -d safe_mode=Off <--substituir @php_bin@ $ chmod +x /opt/phpunit/phpunit
  • 10. Prática No PHP $ vi /usr/local/php5/lib/php.ini include_path = &quot;.: /opt/phpunit &quot;
  • 12.
  • 13.
  • 14. Nosso primeiro teste $ phpunit <TestCase> $ phpunit <TestCase> <Arquivo>
  • 15.
  • 16. setUp e tearDown class LinkedListTest extends PHPUnit_Framework_TestCase { private $dados ; protected function setUp() { parent ::setUp(); $this ->dados = array ( &quot;PHP&quot; , &quot;Java&quot; , &quot;Ruby&quot; , &quot;Python&quot; ); } protected function tearDown() { parent ::tearDown(); $this ->dados = null; } }
  • 17.
  • 18.
  • 20. Skeleton <?php class Calculadora { /** * * @assert (2,3) == 5 */ public function somar ( $arg1 , $arg2 ) { return $arg1 + $arg2 ; } /** * * @assert (10,2) == 8 * @assert (12,2) == 10 * @assert (100,97) == 3 * @assert (5,3) == 2 */ public function subtrair ( $arg1 , $arg2 ) { return $arg1 - $arg2 ; } }
  • 21. Organizando seus testes Application/ Package/ Class (Application/Package/Class.php) ... ... ... Tests/ AllTests.php Package/ Package_AllTests.php ClassTest (Application/Tests/Package/ClassTest.php)
  • 22. Organizando seus testes <?php require_once ( 'PHPUnit/Framework/TestSuite.php' ); /** * inclue suites de testes que estão em um nível inferior */ require_once (dirname(__FILE__). '/Lista/AllTests.php' ); /** * inclue classes de teste no mesmo diretório */ require_once (dirname(__FILE__). '/CalculadoraTest.php' ); class AllTests { public static function suite() { $suite = new PHPUnit_Framework_TestSuite( 'PHP Conference' ); $suite ->addTest(Lista_AllTests::suite()); $suite ->addTestSuite( &quot;CalculadoraTest&quot; ); return $suite ; } }
  • 23. Organizando seus testes <?php require_once ( 'PHPUnit/Framework/TestSuite.php' ) ; require_once (dirname ( __FILE__ ) . '/LinkedListTest.php' ) ; class Lista_AllTests extends PHPUnit_Framework_TestSuite { protected function setUp () { //-- criando ambiente } public static function suite () { $suite = new PHPUnit_Framework_TestSuite ( 'PHP Conference - Listas' ) ; $suite ->addTestSuite ( 'LinkedListTest' ) ; return $suite ; } protected function tearDown () { //-- desfazendo ambiente } }
  • 24.
  • 25.
  • 28.
  • 33.
  • 35.