Codeception

Codeception, testes em PHP para todos

Olá galera, tudo certo ?

Hoje veremos como utilizar o framework de teste chamado Codeception. Eu acabei esbarrando com essa ferramenta por acaso enquanto estava pesquisando ferramentas mais completas do que o PHPUnit para criar testes no PHP. Vamos lá então?

Instalação

Para instalar o Codeception é muito simples pessoal, basta a partir de qualquer pasta executar o seguinte comando:

composer require codeception/codeception

    Observação: Caso você não conheça o composer, ele é um gerenciador as dependências para seus projetos, veja este post falando sobre.

Começando…

Após o término da instalação, podemos verificar que o executável codecept reside na pasta “vendor/bin”. O primeiro comando necessário para utilizar a ferramenta é:

vendorbincodecept bootstrap

O comando acima criará em seu projeto a estrutura básica do framework. Devo salientar que com o codeception você pode criar testes unitários como no PHPUnit (inclusive por baixo dos panos ele o utiliza), testes de integração (que normalmente são testes que trabalham com o banco de dados) e ainda, testes de interface, que apesar de muitas pessoas darem pouca prioridade são tão importantes quantos os outros, pois testam a interface que o usuário utiliza.

Para exemplificar as funcionalidades do codeception mostrarei um exemplo com teste unitário.

Testes Unitários

Testes unitários, como o próprio nome diz, são testes que querem validar uma parte única da sua aplicação, normalmente um teste unitário verifica os “caminhos” que sua aplicação pode tomar.

A primeira coisa a se fazer ao começar a escrever testes, sejam eles unitários ou não, no codeception é criar uma suíte de testes, que é basicamente um agrupamento nomeado de seus testes. Para isso, execute o comando abaixo:

vendorbincodecept generate:suite exemplos

O comando criará uma nova suíte de testes chamada “exemplos”. Antes de prosseguir, precisamos criar algo para testar, então vamos criar uma clássica classe “Calculadora” que possui um método chamado “soma”. Segue o arquivo de exemplo abaixo:

Uma vez criada essa classe, precisamos agora rodar o seguinte comando para criar uma classe de teste unitário:

vendor/bin/codecept generate:phpunit exemplos CalculadoraTest

O comando criará a classe de teste “CalculadoraTest” no diretório “tests/exemplos”. Ao abrir este arquivo você verá que existem alguns métodos já criados, sendo eles: setUp, tearDown e testMe. O método “setUp” é executado ao iniciar a execução dos testes da classe. Neste ponto é comum criar conexão com o banco de dados, inicializar variáveis, importar arquivos, etc. O método “tearDown”, é executado ao final da execução dos testes da classe atual, normalmente é usado para liberar algum recurso anteriormente alocado, como desconectar do banco de dados. O último é um método criado pelo codeception como exemplo, e será daqui que partimos. Agora que temos uma estrutura básica, podemos finalmente começar a escrever nossos testes unitários. Comece alterando o nome do método testMe, para “testSoma”, indicando que a função deste método é testar a função soma da classe Calculadora. Em seguida vamos usar uma das funções do PHPUnit para comparar o resultado retornado por uma função, chamada assertEquals, que em tradução livre seria algo como “afirmar que o resultado é igual a”. Segue abaixo o resultado de como deve ficar a classe de teste:
Observação: Veja mais comandos do PHPUnit neste link.P

Agora vamos rodar o comando de build do codeception:

vendor/bin/codecept build

E finalmente rodar nossos testes:

vendor/bin/codecept run

A saída do comando deve se parecer com imagem abaixo:
Resultado da execução do comando run

Como pode-se ver na imagem a mensagem OK (1 test, 1 assertion) indica que todos os testes passaram, e a mensagem “CalculadoraTest::testSoma” indica que o método “testSoma” da classe “CalculadoraTest” que criamos, foi executado sem errors.

Bem pessoal, este é o primeiro post referente ao Codeception, um framework completo para testes, espero que tenham gostado. Aguardem os próximos posts e acompanhem as novidades do ButecoOpenSource. Até lá!

  • Arian Maykon

    Bom post, mas pensei que fosse falar mais de testes de aceitação ou testes funcionais, que imagino ser o foco do Codeception, tal qual o Behat.

    • Jonathan André Schweder

      olá, este é o primeiro post, é apenas uma introdução conforme deixei no final: “Bem pessoal, este é o primeiro post referente ao Codeception, … “

      • Arian Maykon

        Hum, ok então, my bad 🙂

  • Arian Maykon

    Bom post, mas pensei que fosse falar mais de testes de aceitação ou testes funcionais, que imagino ser o foco do Codeception, tal qual o Behat.

    • Jonathan André Schweder

      olá, este é o primeiro post, é apenas uma introdução conforme deixei no final: “Bem pessoal, este é o primeiro post referente ao Codeception, … “

      • Arian Maykon

        Hum, ok então, my bad 🙂

  • Arian Maykon

    Bom post, mas pensei que fosse falar mais de testes de aceitação ou testes funcionais, que imagino ser o foco do Codeception, tal qual o Behat.

    • Jonathan André Schweder

      olá, este é o primeiro post, é apenas uma introdução conforme deixei no final: “Bem pessoal, este é o primeiro post referente ao Codeception, … “

      • Arian Maykon

        Hum, ok então, my bad 🙂