Zend Framework - Teste de Unidade
Em geral, podemos depurar um aplicativo PHP usando o advanced debugger tool ou usando comandos simples como echo e die. Em um cenário da web, precisamos testar a lógica de negócios, bem como a camada de apresentação. Os formulários em um aplicativo da web podem ser testados inserindo dados de teste relevantes para garantir que os formulários estejam funcionando conforme o esperado.
O design de um site pode ser testado manualmente usando um navegador. Esse tipo de processo de teste pode ser automatizado usando teste de unidade. Um teste de unidade é essencial em grandes projetos. Esses testes de unidade ajudarão a automatizar o processo de teste e alertar o desenvolvedor quando algo der errado.
Configurando o PHPUnit
O framework Zend se integra com o framework de teste de unidade PHPUnit. Para escrever um teste de unidade para o framework Zend, precisamos configurar o PHPUnit, o que pode ser feito facilmente usando o seguinte comando Composer.
$ composer require --dev phpunit/phpunit
Depois de executar o comando acima, você obterá uma resposta conforme mostrado no seguinte bloco de código.
Using version ^5.7 for phpunit/phpunit
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
Agora, ao abrir o arquivo “composer.json”, você verá as seguintes alterações -
"require-dev": {
"phpunit/phpunit": "^5.7"
}
TestCase e Assertions
O framework Zend fornece classes auxiliares para testar a unidade do controlador. oTestCase é o principal componente em um PHPUnit framework para escrever os casos de teste e o Zend Framework fornece uma implementação abstrata do TestCase que é chamado de AbstractHttpControllerTestCase.
Este AbstractHttpControllerTestCase fornece vários Assertmétodos e podem agrupados por funcionalidade. Eles são os seguintes -
Request Assertions- Usado para declarar a solicitação http. Por exemplo, assertControllerName.
CSS Select Assertions - Usado para verificar o HTML de resposta usando o modelo HTML DOM.
XPath Assertions - Uma alternativa às asserções de seleção CSS com base no XPath.
Redirect Assertions - Usado para verificar o redirecionamento da página.
Response Header Assertions - Usado para verificar o cabeçalho de resposta como código de status (assertResponseStatusCode)
Criar diretório de testes
Um teste de unidade pode ser escrito separadamente para cada módulo. Toda a codificação relacionada ao teste precisa ser criada dentro dotest pasta sob o diretório raiz do módulo.
Por exemplo, para escrever um teste para o TutorialController disponível no módulo Tutorial, a classe de teste precisa ser colocada no diretório myapp / module / Tutorial / test / Controller /.
Exemplo
Vamos escrever uma classe de teste para testar a unidade TutorialController.
Para começar, devemos escrever uma classe chamada TutorialControllerTest e estendê-la para AbstractHttpControllerTestCase.
A próxima etapa é escrever um Setupmétodo para configurar o ambiente de teste. Isso pode ser feito chamando osetApplicationConfig método e passando nosso arquivo de configuração do aplicativo principal myapp / config / application.config.php
public function setUp() {
$configOverrides = [];
$this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides
));
parent::setUp();
}
Escreva um ou mais métodos e chame vários métodos de declaração dependendo do requisito.
$this->assertMatchedRouteName('tutorial');
Escrevemos a classe de teste e a lista completa é a seguinte -
<?php
namespace TutorialTest\Controller;
use Tutorial\Controller\TutorialController;
use Zend\Stdlib\ArrayUtils;
use Zend\Test\PHPUnit\Controller\AbstractHttpControllerTestCase;
class TutorialControllerTest extends AbstractHttpControllerTestCase {
public function setUp() {
$configOverrides = [];
$this->setApplicationConfig(ArrayUtils::merge( include __DIR__ . '/../../../../config/application.config.php', $configOverrides
));
parent::setUp();
}
public function testIndexActionCanBeAccessed() {
$this->dispatch('/tutorial', 'GET'); $this->assertResponseStatusCode(200);
$this->assertModuleName('tutorial'); $this->assertControllerName(TutorialController::class);
$this->assertControllerClass('TutorialController'); $this->assertMatchedRouteName('tutorial');
}
}
Agora, abra um prompt de comando, vá para o diretório raiz do aplicativo e execute o phpunit executável disponível dentro do vendor pasta.
cd /path/to/app
./vendor/bin/phpunit ./vendor/bin/phpunit module/
Tutorial/test/Controller/TutorialControllerTest.php
O resultado será como mostrado no seguinte bloco de código -
PHPUnit 5.7.5 by Sebastian Bergmann and contributors.
.1 / 1 (100%)
Time: 96 ms, Memory: 8.00MB
OK (1 test, 5 assertions)