Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
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
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
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.
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?
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.
Não necessariamente. Podem haver outros casos.
Gabriel Jacinto poderia dar um exemplo de outros casos?
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".
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
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.
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: ??????
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
{
setUp
Equivalente ao __construct() mesmo.
tearDown
Equivalente ao __destruct() mesmo.