Zend Framework - Pruebas unitarias
En general, podemos depurar una aplicación PHP usando el advanced debugger tool o usando comandos simples como echo y die. En un escenario web, necesitamos probar la lógica empresarial, así como la capa de presentación. Los formularios en una aplicación web se pueden probar ingresando datos de prueba relevantes para garantizar que los formularios funcionen como se esperaba.
El diseño de un sitio web se puede probar manualmente mediante un navegador. Este tipo de procesos de prueba se pueden automatizar mediante pruebas unitarias. Una prueba unitaria es fundamental en grandes proyectos. Estas pruebas unitarias ayudarán a automatizar el proceso de prueba y alertarán al desarrollador cuando algo salga mal.
Configuración de PHPUnit
Zend framework se integra con el framework de pruebas unitarias PHPUnit. Para escribir una prueba unitaria para el marco Zend, necesitamos configurar PHPUnit, lo cual se puede hacer fácilmente usando el siguiente comando Composer.
$ composer require --dev phpunit/phpunit
Después de ejecutar el comando anterior, obtendrá una respuesta como se muestra en el siguiente bloque 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
Ahora, cuando abra el archivo "composer.json", verá los siguientes cambios:
"require-dev": {
"phpunit/phpunit": "^5.7"
}
TestCase y afirmaciones
El marco Zend proporciona clases auxiliares para realizar pruebas unitarias del controlador. losTestCase es el componente principal en un PHPUnit marco para escribir los casos de prueba y Zend Framework proporciona una implementación abstracta de TestCase que se llama como AbstractHttpControllerTestCase.
Este AbstractHttpControllerTestCase proporciona varios Assertmétodos y pueden agruparse por funcionalidad. Son los siguientes:
Request Assertions- Se usa para afirmar la solicitud http. Por ejemplo, assertControllerName.
CSS Select Assertions - Se utiliza para comprobar el HTML de respuesta utilizando el modelo DOM de HTML.
XPath Assertions - Una alternativa a las aserciones de selección de CSS basadas en XPath.
Redirect Assertions - Se utiliza para comprobar la redirección de la página.
Response Header Assertions - Se usa para verificar el encabezado de respuesta como el código de estado (assertResponseStatusCode)
Crear directorio de pruebas
Se puede escribir una prueba unitaria por separado para cada módulo. Toda la codificación relacionada con la prueba debe crearse dentro deltest carpeta en el directorio raíz del módulo.
Por ejemplo, para escribir una prueba para el TutorialController disponible en el módulo Tutorial, la clase de prueba debe colocarse en el directorio myapp / module / Tutorial / test / Controller /.
Ejemplo
Escribamos una clase de prueba para probar unitariamente el TutorialController.
Para empezar, deberíamos escribir una clase llamada TutorialControllerTest y extenderla a AbstractHttpControllerTestCase.
El siguiente paso es escribir un Setupmétodo para configurar el entorno de prueba. Esto se puede hacer llamando alsetApplicationConfig y pasando nuestro archivo de configuración de la aplicación principal myapp / config / application.config.php
public function setUp() {
$configOverrides = [];
$this->setApplicationConfig(ArrayUtils::merge(
include __DIR__ . '/../../../../config/application.config.php',
$configOverrides
));
parent::setUp();
}
Escriba uno o más métodos y llame a varios métodos de aserción según el requisito.
$this->assertMatchedRouteName('tutorial');
Hemos escrito la clase de prueba y la lista completa es la siguiente:
<?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');
}
}
Ahora, abra un símbolo del sistema, vaya al directorio raíz de la aplicación y ejecute el phpunit ejecutable disponible dentro del vendor carpeta.
cd /path/to/app
./vendor/bin/phpunit ./vendor/bin/phpunit module/
Tutorial/test/Controller/TutorialControllerTest.php
El resultado será el que se muestra en el siguiente bloque 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)