PHPUnit e teste de software

5,066 views

Published on

No decorrer dos anos o teste de software tem evoluído e com isto
encontramos diversas ferramentas nos dias de hoje que nos ajudam a
entregar um serviço mais maduro e consolidado, uma destas ferramentas
é o Teste de Unidade (PHPUnit), na conversa o palestrante apresenta
alguns recursos para se utilizar junto com o PHPUnit e alguns exemplos
do uso do aplicativo.

  • Be the first to comment

PHPUnit e teste de software

  1. 1. Ricardo Striquer Soares (ricardophp) http://twitter.com/rstriquer http://www.programabrasil.org/ e teste de software
  2. 2. O teste do software é a investigação do software a fim de fornecer informações sobre sua qualidade em relação ao contexto em que ele deve operar. Isso inclui o processo de utilizar o produto para encontrar seus defeitos. Teste de software
  3. 3. Frases celebres! - Depois validamos com o cliente; - O prazo está apertado, vamos deixar os testes para a próxima faze; - Depois escrevo o caso de teste;
  4. 4. Resultados conhecidos! - Não, eu fiz o que você mandou! - O software podia estar incorreto, mas ele não pode ter estragado seu computador! - Na minha máquina funcionou.
  5. 5. http://pt.wikipedia.org/wiki/ISO_9126 ISO/IEC 9126 ou NBR ISO/IEC 9126.
  6. 6. Objetivos de teste de softwares 1) Garantir que os objetivos técnicos e de negócios que guiaram o design e o desenvolvimento foram conquistados; 2) Autenticar que o software funciona como esperado; 3) Garantir que o processo (aplicativo) pode ser implementado com as mesmas características (esperadas);
  7. 7. Objetivos do xUnit Rápido ao se executar Isolado Composto Fácil de escrever Fácil de aprender Fácil de Ler Simples de executar
  8. 8. Fácil de aprender a se escrever X Fácil de escrever Isolados X Rápido de executar Problemas padrão de um xUnit
  9. 9. ' Padrão de um autêntico xUnit http://flylib.com/books/en/1.104.1.24/1/
  10. 10. Funcionalidade padrão de um xUnit
  11. 11. Era uma vez .... EM 1997 Kent Beck e Eric Gamma estavam em um voo de Zürich para Atlanta seguindo para a OOPSLA Conference. Kent Beck possuía um framework de testes para SmallTalk e gostaria de aprender Java, Erich Gamma possuía um computador com Java e gostaria de ter um framework de testes parar Java, quando o Avião chegou a Atlanta Kent Beck havia aprendido Java de Erick Gamma e eles haviam escrito a versão inicial do que hoje é conhecido como jUnit.
  12. 12. A concorrência http://ojesunit.blogspot.com/ http://code.google.com/p/snaptest/ (Módulo Lime) http://www.symfony-project.org/book/1_2/15-Unit-and-Functional-Testing http://www.simpletest.org/
  13. 13. Quem utiliza phpUnit http://logging.apache.org/log4php/ http://www.s9y.org/ http://www.osoa.org/display/PHP/SOA+PHP+Homepage http://www.phpunit.de/wiki/WhoUsesPHPUnit http://propel.phpdb.org/ http://gtk.php.net/ http://agavi.org/ http://www.phing.info/
  14. 14. Características principais
  15. 15. Pontos importantes: TAGs para descritivos de funções @depends @dataProvider @expectedException @expectedException Classe PHPUnit_Framework_Assert assertArrayHasKey(); assertClassHasAttribute(); assertClassHasStaticAttribute(); assertContains(); assertContainsOnly(); assertEmpty(); assertEqualXMLStructure(); assertEquals(); assertFalse(); assertFileEquals(); assertFileExists(); assertGreaterThan(); assertGreaterThanOrEqual(); assertInstanceOf(); assertInternalType(); assertLessThan();assertLessThanOrEqual(); assertNull(); assertObjectHasAttribute(); assertRegExp(); assertStringMatchesFormat(); assertStringMatchesFormatFile(); assertSame(); assertSelectCount(); assertSelectEquals(); assertSelectRegExp(); assertStringEndsWith(); assertStringEqualsFile(); assertStringStartsWith(); assertTag(); assertThat(); assertTrue(); assertType(); assertXmlFileEqualsXmlFile(); assertXmlStringEqualsXmlFile(); assertXmlStringEqualsXmlString
  16. 16. Teste prático Simples. http://ticomqi.blogspot.com/2010/08/capitulo-4-escrevendo-testes-para.html Exemplo 4.1: operações com matrizes Testes com PHPUnit
  17. 17. Teste prático Complexo.
  18. 18. phpunit CarrinhoTest.php PHPUnit 3.4.15 by Sebastian Bergmann. ..FF.. Time: 1 second, Memory: 12,25Mb There were 2 failures: 1) CarrinhoTest::test_Carrinho___aplicaPromocaoPagamentoEntrega with data set #2 (0.05, false, 10, 20, 100, 0, 120) Failed asserting that <integer:120> matches expected <integer:130>. /srv/htdocs/sandbox/ricardo/FC/trunk/www/fc/phpunit/CarrinhoTest.php:28 2) CarrinhoTest::test_Carrinho___aplicaPromocaoPagamentoEntrega with data set #3 (0.05, true, 10, 20, 100, 0, 120) Failed asserting that <integer:120> matches expected <integer:130>. /srv/htdocs/sandbox/ricardo/FC/trunk/www/fc/phpunit/CarrinhoTest.php:28 FAILURES! Tests: 6, Assertions: 6, Failures: 2. Exemplo de resultado de erro
  19. 19. <?php include ( &quot;../../loja.php&quot; ); include ( __PATH_CARRINHO_DIR__ . &quot;/carrinho.php&quot; ); /** * Classe de teste da classe Fechamento * @package Unit Test */ class CarrinhoTest extends PHPUnit_Framework_TestCase { /** * Efetua o teste da função FormaPagCartao * @dataProvider provider_Carrinho___aplicaPromocaoPagamentoEntrega */ public function test_Carrinho___aplicaPromocaoPagamentoEntrega ( $desconto_perc , $bPagamentoComposto , $fTotalEmbalagem , $fFrete , $f_val_montagem , $iPagPag , $fResultado ) { $aListaCarrinho = array ( 'fTotalEmbalagem' => $fTotalEmbalagem , 'fFrete' => $fFrete , ); $aPromocaoInfo = array ( 'desconto_perc' => $desconto_perc , ); $aFrete = array ( 'f_val_montagem' => $f_val_montagem ); $this ->assertEquals(Carrinho :: __aplicaPromocaoPagamentoEntrega( $aPromocaoInfo , $bPagamentoComposto , & $aListaCarrinho , $aFrete , $iPagPag ), $fResultado ); } /** * Disponibiliza dados para o teste da forma de pagamento. */ public function provider_Carrinho___aplicaPromocaoPagamentoEntrega () { return ( array ( array (NULL, false , 0 , NULL, 0 , 0 , 0 ), // resultado correto 0 array (NULL, false , 0 , NULL, 0 , 6 , 0 ), // resultado correto 0 array ( 0.05 , false , 10 , 20 , 100 , 0 , 120 ), // resultado correto 130 array ( 0.05 , true , 10 , 20 , 100 , 0 , 120 ), // resultado correto 130 array ( 0 , false , 0 , 25 , 0 , 0 , 25 ), // resultado correto 25 array ( 0 , true , 0 , 25 , 0 , 0 , 25 ), // resultado correto 25 ) ); } } Exemplo de resultado de erro
  20. 20. Só isso ? E agora, o que mais? Selenium
  21. 21. Só isso ? E agora, o que mais? xDebug
  22. 22. Só isso ? E agora, o que mais? KCacheGrind
  23. 23. Só isso ? E agora, o que mais? CruiseControl
  24. 24. Só isso ? E agora, o que mais? phpUnderControl
  25. 25. Perguntas legais Como escrever testes de unidade em PHP com uma base de código processual? Na maior parte estou convencido das vantagens dos testes de unidade, e gostaria de começar a aplicar o conceito de uma grande base de código existente, escrito em PHP. Menos de 10% desse código é orientado a objeto. Ex: 1 http://pt.efreedom.com/Question/1-899390/Como-escrever-testes-de-unidade-em-PHP-com-uma-base-de-codigo-processual
  26. 26. Perguntas legais Como escrever testes de unidade em PHP com uma base de código processual? Na maior parte estou convencido das vantagens dos testes de unidade, e gostaria de começar a aplicar o conceito de uma grande base de código existente, escrito em PHP. Menos de 10% desse código é orientado a objeto. Ex: 2 http://pt.efreedom.com/Question/1-899390/Como-escrever-testes-de-unidade-em-PHP-com-uma-base-de-codigo-processual
  27. 27. Perguntas legais Como testar métodos privados? Você parece estar ciente já, mas só vou reexpressá-lo de qualquer maneira, é um mau sinal, se você precisa testar métodos protegidos. O objectivo de um teste de unidade, é a interface de uma classe de teste e métodos protegidos são detalhes de implementação. Dito isto, há casos em que faz sentido. Se você usar a herança, você pode ver uma superclasse, fornecendo uma interface para a subclasse. Então, aqui, você teria que testar o método protegido (mas nunca um privado um). A solução para isso, é criar uma subclasse para fins de teste e usar isso para expor os métodos. Ex.: http://pt.efreedom.com/Question/1-34571/Qual-e-a-melhor-forma-de-metodos-particulares-de-teste-de-unidade
  28. 28. Perguntas legais Testando formulário entradas em PHPUnit Qual é a melhor maneira de testar $_GETe $_POSTentradas em PHPUnit? http://pt.efreedom.com/Question/1-132342/Testando-formulario-entradas-em-PHPUnit
  29. 29. Perguntas legais Testando headers Qual é a melhor maneira de testar headers em PHPUnit? http://pt.efreedom.com/Question/1-132342/Testando-formulario-entradas-em-PHPUnit Construir programa de exemplo com cURL
  30. 30. Fim http://www.programabrasil.org/palestras http://www.phpunit.de/ http://ticomqi.blogspot.com/p/phpunit.html

×