it-swarm-pt.tech

Como uso o PHPUnit com o Zend Framework?

Eu gostaria de saber como escrever testes PHPUnit com Zend_Test e, em geral, com PHP.

41
Thomas Schaaf

Estou usando o Zend_Test para testar completamente todos os controladores. É bem simples de configurar, pois você só precisa configurar o seu arquivo bootstrap (o arquivo bootstrap $ NÃO deve, por si só, NÃO despachar o controlador frontal!)). A classe de caso de teste base é assim:

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();
    }
}

onde Application::setup(); realiza todas as tarefas de configuração que também configuram o aplicativo real. Um teste simples seria assim:

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

Isso é tudo...

14
Stefan Gehrig

Eles têm um " Introdução à arte do teste de unidade " na Zend Developer Zone, que abrange o PHPUnit.

7
isuldor

Achei este artigo muito útil. Também Zend_Test documentação ajudou muito. Com a ajuda desses dois recursos, consegui implementar com sucesso o teste de unidade no tutorial de início rápido do Zend Framework e escrever alguns testes para ele.

2
Josef Sábl

Usando o ZF 1.10, coloquei algum código bootstrap em tests/bootstrap.php (basicamente o que está em (public/index.php)), até $ application-> bootstrap ().

Então eu posso executar um teste usando

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

Além disso, se você estiver usando uma transação de banco de dados, seria melhor excluir toda a transação realizada através de um teste de unidade, caso contrário, seu banco de dados ficará todo bagunçado.

assim por diante

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();
}

e na desmontagem tudo o que você precisa fazer é reverter

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

Não usei o Zend_Test, mas escrevi testes em aplicativos usando o Zend_MVC e similares. A maior parte é obter o suficiente do seu código bootstrap em sua configuração de teste.

0
Sam Corder