it-swarm-es.com

¿Cómo uso PHPUnit con Zend Framework?

Me gustaría saber cómo escribir pruebas PHPUnit con Zend_Test y, en general, con PHP.

41
Thomas Schaaf

Estoy usando Zend_Test para probar completamente todos los controladores. Es bastante simple de configurar, ya que solo tiene que configurar su bootstrap (el archivo bootstrap en sí mismo NO debe enviar el controlador frontal!). Mi La clase de caso de prueba base se ve así:

abstract class Controller_TestCase extends Zend_Test_PHPUnit_ControllerTestCase
{
    protected function setUp()
    {
        $this->bootstrap=array($this, 'appBootstrap');
        Zend_Auth::getInstance()->setStorage(new Zend_Auth_Storage_NonPersistent());
        parent::setUp();
    }

    protected function tearDown()
    {
        Zend_Auth::getInstance()->clearIdentity();
    }

    protected function appBootstrap()
    {
        Application::setup();
    }
}

donde Application::setup(); realiza todas las tareas de configuración que también configuran la aplicación real. Una prueba simple entonces se vería así:

class Controller_IndexControllerTest extends Controller_TestCase
{
    public function testShowist()
    {
        $this->dispatch('/');
        $this->assertController('index');
        $this->assertAction('list');
        $this->assertQueryContentContains('ul li a', 'Test String');
    }
}

Eso es todo...

14
Stefan Gehrig

Tienen un " Introducción al arte de las pruebas unitarias " en la Zona de desarrolladores de Zend, que cubre PHPUnit.

7
isuldor

Encontré este artículo muy útil. También Zend_Test documentación ayudó mucho. Con la ayuda de estos dos recursos, logré implementar con éxito las pruebas unitarias en Tutorial de inicio rápido del Marco Zend y escribir algunas pruebas para ello.

2
Josef Sábl

Usando ZF 1.10, pongo un código bootstrap en tests/bootstrap.php (básicamente lo que está en (public/index.php), hasta $ application-> bootstrap ().

Entonces puedo ejecutar una prueba usando

phpunit --bootstrap ../bootstrap.php  PersonControllerTest.php 
1
Alex

Además, si usa una transacción de base de datos, lo mejor sería eliminar toda la transacción que se realiza mediante una prueba unitaria; de lo contrario, su base de datos se desordenará.

así sucesivamente

public function setUp() {



    YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(true);



    YOUR_ZEND_DB_INSTANCE::getInstance()->query("BEGIN");

    YOUR_ZEND_DB_INSTANCE::getInstance()->getCache()->clear();

    // Manually Start a Doctrine Transaction so we can roll it back
    Doctrine_Manager::connection()->beginTransaction();
}

y en desmontaje todo lo que necesitas hacer es retroceder

public function tearDown() {



    // Rollback Doctrine Transactions
    while (Doctrine_Manager::connection()->getTransactionLevel() > 0) {
        Doctrine_Manager::connection()->rollback();
    }

    Doctrine_Manager::connection()->clear();



    YOUR_ZEND_DB_INSTANCE::getInstance()->query("ROLLBACK");
    while (YOUR_ZEND_DB_INSTANCE::getInstance()->getTransactionDepth() > 0) {
        YOUR_ZEND_DB_INSTANCE::getInstance()->rollback();
    }
    YOUR_ZEND_DB_INSTANCE::getInstance()->setUnitTestMode(false);

}
0
KdPurvesh

No he usado Zend_Test pero he escrito pruebas contra aplicaciones que usan Zend_MVC y similares. La mayor parte es obtener suficiente de su código bootstrap en su configuración de prueba.

0
Sam Corder