Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Andre Luizao

Métodos do PHPUnit

Recommended Posts

Tudo bem pessoal do Imasters

Estou estudando testes unitários usando o PHPUnit no NetBeans, e me deparei com os seguintes métodos do PHPUnit:

  • assertPreConditions() : parece muito com __construct()
  • assertPostConditions()
  • onNotSuccessfulTest()
  • setUp(): parece muito com __construct()
  • tearDown(): parece muito com __destruct()
  • setUpBeforeClass()
  • tearDownAfterClass()

Dúvidas:

1) Para que server cada um desses métodos apresentados ai em cima? (Li varias vezes a documentação do proprio PHPUnit, só que não entendir muito bem a explicação deles sobre esses métodos)

2) Qual a hora certa de se usar cada um desses métodos?

3) Se possivel poderiam me passar exemplo de cada um? Pode ser exemplos bem simples, só para entender o essencial =)

 

4) Aproveitando o post uma perguntinha, faz sentido eu criar um método __construct e __destruct na minhas classes de testes unitários?

Agradeço muito quem me ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

Posso falar de alguns métodos apenas, pois também estou iniciando em TDD.

 

assertPreConditions

Seu teste só irá rodar se todos os requisitos descritos neste método também passarem. Se algum coisa nesse método falhar, o restante do teste não será executado.

<?php
class ExampleTest extends PHPUnit_Framework_TestCase
{
   public function assertPreConditions()
    {
        $this->assertTrue(
            class_exists( 'Example' ),
            'Class "Example" not found!'
        );
    }

setUp

Equivalente ao __construct() mesmo.

 

tearDown

Equivalente ao __destruct() mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela força Jonaslhp, foi de grande ajuda!

Se alguém explicasse os objetivos pelo menos desses métodos setUpBeforeClass e tearDownAfterClass. Já seria uma mão na roda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar de muito parecidos os métodos, cada um ocorre em seu determinado tempo e condição (pré/pós). Além disso, os teste unitários exigem nomes completos para que não haja dúvidas sobre o que está sendo testado.

http://phpunit.de/manual/current/en/fixtures.html#fixtures.more-setup-than-teardown

 

Example 4.3 uses the setUpBeforeClass() and tearDownAfterClass() template methods to connect to the database before the test case class' first test and to disconnect from the database after the last test of the test case, respectively.


Perceba que os métodos setUpBeforeClass e tearDownAfterClass possuem funções parecidos de setUp e tearDown, respectivamente, mas em momentos diferentes baseado na classe de teste.

 

- setUpBeforeClass -> Antes da classe de teste;

- tearDownAfterClass -> Depois da classe de teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel Heming, então esses métodos são para conectar ao BD antes de se criar as classes a ser testadas, e deletar o BD depois do ultimo teste. certo?

 

Me diga uma outra coisa por que esses métodos(setUpBeforeClass e tearDownAfterClass) são declarados como static?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel Heming, então esses métodos são para conectar ao BD antes de se criar as classes a ser testadas, e deletar o BD depois do ultimo teste. certo?

Não necessariamente. Podem haver outros casos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Apesar da maioria das vezes servir pra conexão com alguma base de dados, em outras você pode, por exemplo, atribuir valores à propriedades (variáveis) para serem usadas no teste todo, caso vários testes precisem.

 

Na documentação há esses exemplos: "In practice, you only need to implementtearDown()if you have allocated external resources like files or sockets in setUp(). If your setUp() just creates plain PHP objects, you can generally ignore tearDown(). However, if you create many objects in your setUp(), you might want tounset() the variables pointing to those objects in your tearDown() so they can be garbage collected." - More setUp() than tearDown().

 

Tradução: "Na prática, você só precisa implementar tearDown() se você tem recursos alocados externamente, como arquivos ou sockets no setUp(). Se set setUp() só cria objetos planos do PHP, você pode, geralmente, ignorar o tearDown(). Entretanto, se você cria alguns objetos em seu setUp(), você pode querer fazer um unset() nas variáveis apontando para seus aqueles objetos no tearDown(), para que possam ser descartados".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gabriel Heming, então esses métodos são para conectar ao BD antes de se criar as classes a ser testadas, e deletar o BD depois do ultimo teste. certo?

Não, apenas foram utilizados no exemplo da documentação. É para realizar qualquer ação antes e/ou depois de haver uma instância da classe de teste.

 

Me diga uma outra coisa por que esses métodos(setUpBeforeClass e tearDownAfterClass) são declarados como static?

São estáticos pois são executados antes de existir a classe de teste (setUp) e depois dela ser destruída (tearDown)

 

 

Obs: esqueci de enviar isso a duas horas atrás... LOL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara esse Hangout aqui do João Batista, Augusto Pascutti, Rogério Prado e cia é muito bom, e pode te ajudar a esclarecer alguns conceitos:

 

 

Perceba que em dado momento, o João utiliza o método setUp() em uma classe teste para criar uma tabela na memória, usando SQLite. E no método tearDown(), ele apaga a tabela, para que a cada teste, ela seja criada do zero novamente. Esse é um caso de uso que você pode usar esses dois métodos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal agradeço muito a paciência e ajuda de vocês, vou postar aqui o que eu entende até o momento atual, me corrija se algo estiver errado. vamos lá:


....::: OS MÉTODOS DO PHPUNIT ANTES DE SE FAZER OS TESTES :::....

  • setUpBeforeClass: Antes de instanciar as classes testadas no método "setUp", algumas vezes pode existir a necessidade de se fazer uma ação antes como (conectar com o BD, e entre outros casos). E esse método é declarado como static, pois ele tem que ser executado antes mesmo da class test existir.
  • setUp: Aqui nesse método prepara o ambiente como (instanciar as classes que serão testadas, ou passar valores numa Array's e entre outros) e depois coloca num atributo da class test.
  • assertPreConditions: Bom o que eu entendir desse método é que depois que o ambiente foi criado no método "setUp", o método "assertPreConditions" verefica se tudo que foi criado no "setUp" está na condições e requisitos a ser testadas. Se algum coisa nesse método falhar, o restante dos testes não será executado.

 

 

....::: OS MÉTODOS DO PHPUNIT DEPOIS QUE SE FEZ OS TESTES :::....

  • assertPostConditions: ??????
  • tearDown: Limpa tudo que foi criado no método "setUp".
  • tearDownAfterClass: Limpa tudo que foi criado no método "setUpBeforeClass".
  • onNotSuccessfulTest: ??????

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.