-
Notifications
You must be signed in to change notification settings - Fork 0
2. Utilizando PHPUnit
- PHP ^8.0
- Composer
- PHPUnit
Não esqueçam de conferir se está tudo instalado executando no terminal:
php -vcomposerphpunit
- No projeto, crie o diretório
test - Crie
CalculadoraTest.php
class CalculadoraTest extends PHPUnit\Framework\TestCase {}A classe utilizada no extends está no namespace ("caminho") PHPUnit\Framework\.
Mas fica feião, né? Vamos utilizar o use-as para melhorar isso:
use PHPUnit\Framework\TestCase as PHPUnit;
class CalculadoraTest extends PHPUnit {}- Crie o método
testSoma()
public function testSoma() {
$resultado = Calculadora::soma(1, 2);
$this->assertEquals(3, $resultado);
}- Crie a classe Calculadora com o método estático soma em
src/models/ - Execute o teste com o comando
phpunit test/
Deu erro, certo? Isso porque a classe de teste não conhece a classe Calculadora. Importe.
Mas perai, não tem como deixar o import "automático"? Sim. Vamos utilizar o composer para gerar o nosso autoload, ou seja, auto imports.
Crie composer.json na raiz do seu projeto:
{
"autoload": {
"classmap": [
"src/models"
]
}
}Ou seja, você quer que qualquer classe que estiver no models seja compactada e inclusa automaticamente para utilizar isso nos testes.
Agora execute o comando composer install para gerar o seu autoload.php. Em vendor/composer/autoload_classmap.php, veja que a classe Calculadora está inclusa. Vamos testar na classe de teste?
- Comente a importação da classe Calculadora
- Execute
phpunit testnovamente
Não reconheceu a classe Calculadora. Ué?! Calma... na verdade precisamos incluir o autoload para funcionar.
Mas então porque criar esse autoload se eu vou ter que importar da mesma forma? Com ele só é preciso importar um arquivo e todas as outras classes podem ser inclusas.
E quando adicionamos novas classes em models, elas são reconhecidas automaticamente? Não. Temos que rodar composer dump-autoload para ficar atualizando ;(
- Inclua o autoload na sua classe de teste
<?php
require_once dirname(__FILE__) . "/../vendor/autoload.php";
// classe...
Não tem como deixar esses imports padrão para todos os testes? Tem sim.
- Crie o arquivo de configuração
phpunit.xmlna raíz do projeto
<phpunit
bootstrap="vendor/autoload.php"
colors="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
cacheResult="false"
>
<testsuites>
<testsuite name="Testes">
<directory>test</directory>
</testsuite>
</testsuites>
</phpunit>- Execute o teste até passar. Pronto!
Quer ver algo legal que dá para fazer? Clique aqui
Veja a documentação do PHPUnit para se aprofundar mais: Documentação PHPUnit