Escrevendo testes automatizados TDD

De Wiki Expresso V3
Ir para: navegação, pesquisa

Conteúdo

Criando um teste automatizado

Para criar um novo teste automatizado, a seguinte estrutura deve ser respeitada:

1) Verifique se há uma pasta em tests/tine20 para o módulo para o qual você irá criar o teste;

2) Se a pasta não existir, crie-a;

3) Se a pasta não existir, apos criá-la, crie um arquivo AllTests.php, de acordo com esta estrutura:

class [NOME DO MÓDULO]_AllTests
{
    public static function main ()
    {
        PHPUnit_TextUI_TestRunner::run(self::suite());
    }
    
    public static function suite ()
    {
        $suite = new PHPUnit_Framework_TestSuite('All [NOME DO MÓDULO] tests');

        $suite->addTest([NOME DA SUITE DE TESTE]_AllTests::suite());
        $suite->addTestSuite('[NOME DA CLASSE TESTE]');

        return $suite;
    }
}

A classe AllTests.php reúne todas as suites e classes de teste de um módulo.

Uma suíte de testes é uma classe que reúne um grupo de classes de teste.

A classe AllTests.php é uma suíte de testes, logo sua estrutura é referência para criação de outras.

4) Uma classe de teste deverá seguir a seguinte estrutura:

require_once dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'TestHelper.php';

/**
 * Test class for [NOME DA CLASSE TESTADA]
 * @package     [NOME DO MÓDULO]
 */
class [NOME DO CLASSE TESTADA]Tests extends PHPUnit_Framework_TestCase
{  
    /**
     * Runs the test methods of this class.
     *
     * @access public
     * @static
     */
    public static function main()
    {
        $suite  = new TestSuite('Tine 2.0 [NOME DA CLASSE TESTADA] tests');
        PHPUnit_TextUI_TestRunner::run($suite);
    }
    
    protected function setUp()
    {
        // preparação do ambiente para os testes
    }
    
    protected function tearDown()
    {
       // desfaz o que o setUp modificou
    }
    
    /**
    * test sync with non existing collection id
    */
    public function test['NOME DO TESTE]()
    {
        // assertivas
    }
}
  1. Se o módulo for novo, deve ser incluído no arquivo AllTests-Expresso.php

Customizando um teste automatizado

Quando Criar um Teste Customizado:

O teste customizado deve ser implementado para funcionalidades específicas do ExpressoV3.

Podemos criar um novo teste ou sobrescrever um teste Existente.


Habilitando os Testes Customizados:

A execução dos testes customizados pode ser habilitada através do parâmetro 'customtests' do phpunitconfig.inc.php


Exemplo de como criar um teste customizado:

Por exemplo, para customizar o TestCase tests/tine20/ActiveSync/Command/SyncTests.php, onde o método setup() faz referência ao módulo Felamimail, o qual não é usado pelo ExpressoV3.

Primeiro precisamos criar a classe tests/tine20/Custom/ActiveSync/Command/SyncTests.php, no seguinte formato.

class Custom_ActiveSync_Command_SyncTests extends ActiveSync_Command_SyncTests
{

   protected function setUp()
    {
        TestCase::setUp(); // Grandfather
        
        ...
        
        Syncroton_Registry::setEmailDataClass(Tinebase_EmailUser_Factory::getMailApplicationName()."_Frontend_ActiveSync"); 

        ...

    }
}

Observe que essa classe extende a classe ActiveSync_Command_SyncTests, que a função setup() esta sobrescrevendo a classe pai customizando sua implementação.

Também precisamos alterar a classe tests/ActiveSync/Command/AllTests.php, responsável por chama a classe acima.

class ActiveSync_Command_AllTests
{
    ...
  
    public static function suite ()
    {
        $suite = new TestSuite('All ActiveSync command tests');

Na classe acima, a linha:

    $suite = new PHPUnit_Framework_TestSuite('All ActiveSync command tests');

foi alterada para:

    $suite = new TestSuite('All ActiveSync command tests');

Se a customização implicar em não realizar o teste, porque ele não faz sentido para o ambiente, o teste deve ser sobrescrito e em seu conteúdo deverá ser explicitamente haver a instrução de salto do teste:

$this->markTestSkipped();
Ferramentas pessoais
Espaços nominais

Variantes
Ações
Navegação
Ferramentas