Apêndice B. O arquivo de configuração XML

PHPUnit

Os atributos do elemento <phpunit> podem ser usados para configurar a funcionalidade do núcleo do PHPUnit.

<phpunit
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.2/phpunit.xsd"
        backupGlobals="true"
        backupStaticAttributes="false"
        <!--bootstrap="/caminho/para/bootstrap.php"-->
        cacheTokens="false"
        colors="false"
        convertErrorsToExceptions="true"
        convertNoticesToExceptions="true"
        convertWarningsToExceptions="true"
        forceCoversAnnotation="false"
        mapTestClassNameToCoveredClassName="false"
        printerClass="PHPUnit_TextUI_ResultPrinter"
        <!--printerFile="/caminho/para/ResultPrinter.php"-->
        processIsolation="false"
        stopOnError="false"
        stopOnFailure="false"
        stopOnIncomplete="false"
        stopOnSkipped="false"
        testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
        <!--testSuiteLoaderFile="/caminho/para/StandardTestSuiteLoader.php"-->
        strict="false"
        verbose="false">
    <!-- ... -->
</phpunit>

A configuração XML acima corresponde ao comportamento padrão do executor de teste TextUI documentado na seção chamada “Comutadores de linha-de-comando”.

Opções adicionais que não estão disponíveis como comutadores em linha-de-comando são:

convertNoticesToExceptions, convertWarningsToExceptions, convertErrorsToExceptions

Pode ser usado para desligar a conversão automática de cada notificação/aviso/erro do PHP em uma exceção.

forceCoversAnnotation

A Cobertura de Código só será gravada para testes que usem a anotação @covers documentada na seção chamada “@covers”.

Suítes de Teste

O elemento <testsuites> e seu(s) um ou mais filhos <testsuite> podem ser usados para compor uma suíte de teste fora das suítes e casos de teste.

<testsuites>
<testsuite name="Minha Suíte de Testes">
<directory>/caminho/para/arquivos/*Test.php</directory>
<file>/caminho/para/MeuTest.php</file>
<exclude>/caminho/para/excluidos</exclude>
</testsuite>
</testsuites>

Usando os atributos phpVersion e phpVersionOperator uma versão exigida do PHP pode ser especificada. O exemplo abaixo só vai adicionar os arquivos /caminho/para/*Test.php e /caminho/para/MeuTest.php se a versão do PHP for no mínio 5.3.0.

 <testsuites>
<testsuite name="Minha Suíte de Testes">
<directory suffix="Test.php" phpVersion="5.3.0" phpVersionOperator=">=">/caminho/para/arquivos</directory>
<file phpVersion="5.3.0" phpVersionOperator=">=">/caminho/para/MeuTest.php</file>
</testsuite>
</testsuites>

O atributo phpVersionOperator é opcional e padronizado para >=.

Grupos

O elemento <groups> e seus filhos <include>, <exclude>, e <group> podem ser usados para selecionar grupos de testes de uma suíte de testes que (não) deveriam ser executadas.

<groups>
<include>
<group>nome</group>
</include>
<exclude>
<group>nome</group>
</exclude>
</groups>

A configuração XML acima corresponde a invocar o executor de testes TextUI com os seguintes comutadores:

  • --group nome

  • --exclude-group nome

Incluindo e Excluindo Arquivos para Cobertura de Código

O elemento <filter> e seus filhos podem ser usados para configurar a lista-negra e lista-branca para o relatório de cobertura de código.

<filter>
<blacklist>
<directory suffix=".php">/caminho/para/arquivos</directory>
<file>/path/to/file</file>
<exclude>
<directory suffix=".php">/caminho/para/arquivos</directory>
<file>/caminho/para/arquivo</file>
</exclude>
</blacklist>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">/caminho/para/arquivos</directory>
<file>/caminho/para/arquivo</file>
<exclude>
<directory suffix=".php">/caminho/para/arquivos</directory>
<file>/caminho/para/arquivo</file>
</exclude>
</whitelist>
</filter>

Registrando

O elemento <logging> e seus filhos <log> podem ser usados para configurar o registro da execução de teste.

<logging>
<log type="coverage-html" target="/tmp/report" charset="UTF-8"
highlight="false" lowUpperBound="35" highLowerBound="70"/>
<log type="coverage-clover" target="/tmp/coverage.xml"/>
<log type="coverage-php" target="/tmp/coverage.serialized"/>
<log type="coverage-text" target="php://stdout" showUncoveredFiles="false"/>
<log type="json" target="/tmp/logfile.json"/>
<log type="tap" target="/tmp/logfile.tap"/>
<log type="junit" target="/tmp/logfile.xml" logIncompleteSkipped="false"/>
<log type="testdox-html" target="/tmp/testdox.html"/>
<log type="testdox-text" target="/tmp/testdox.txt"/>
</logging>

A configuração XML acima corresponde a invocar o executor de teste TextUI com os seguintes comutadores:

  • --coverage-html /tmp/report

  • --coverage-clover /tmp/coverage.xml

  • --coverage-php /tmp/coverage.serialized

  • --coverage-text

  • --log-json /tmp/logfile.json

  • > /tmp/logfile.txt

  • --log-tap /tmp/logfile.tap

  • --log-junit /tmp/logfile.xml

  • --testdox-html /tmp/testdox.html

  • --testdox-text /tmp/testdox.txt

Os atributos charset, highlight, lowUpperBound, highLowerBound, logIncompleteSkipped e showUncoveredFiles não possuem comutador TextUI equivalente.

  • charset: Conjunto de caracteres a ser usado para as páginas HTML geradas.

  • highlight: Quando definidos como true, o código em seus relatórios de cobertura terá a sintaxe destacada.

  • lowUpperBound: Máxima porcentagem de cobertura para ser considerado de "baixamente" coberto.

  • highLowerBound: Mínima porcentagem de cobertura para ser considerado "altamente" coberto.

Ouvintes de Teste

O elemento <listeners> e seus filhos <listener> podem ser usados para anexar ouvintes adicionais de teste para a execução dos testes.

<listeners>
<listener class="MeuOuvinte" file="/caminho/opcional/para/MeuOuvinte.php">
<arguments>
<array>
<element key="0">
<string>Sebastian</string>
</element>
</array>
<integer>22</integer>
<string>Abril</string>
<double>19.78</double>
<null/>
<object class="stdClass"/>
</arguments>
</listener>
</listeners>

A configuração XML acima corresponde a anexar o objeto $ouvinte (veja abaixo) à execução de teste:

$ouvinte = new MeuOuvinte(
array('Sebastian'),
22,
'Abril',
19.78,
NULL,
new stdClass
);

Setting PHP INI settings, Constants and Global Variables

O elemento <php> e seus filhos podem ser usados para definir configurações, constantes e variáveis globais do PHP. Também pode ser usado para preceder o include_path.

<php>
<includePath>.</includePath>
<ini name="foo" value="bar"/>
<const name="foo" value="bar"/>
<var name="foo" value="bar"/>
<env name="foo" value="bar"/>
<post name="foo" value="bar"/>
<get name="foo" value="bar"/>
<cookie name="foo" value="bar"/>
<server name="foo" value="bar"/>
<files name="foo" value="bar"/>
<request name="foo" value="bar"/>
</php>

A configuração XML acima corresponde ao seguinte código PHP:

ini_set('foo', 'bar');
define('foo', 'bar');
$GLOBALS['foo'] = 'bar';
$_ENV['foo'] = 'bar';
$_POST['foo'] = 'bar';
$_GET['foo'] = 'bar';
$_COOKIE['foo'] = 'bar';
$_SERVER['foo'] = 'bar';
$_FILES['foo'] = 'bar';
$_REQUEST['foo'] = 'bar';

Configurando Navegadores para Selenium RC

O elemento <selenium> e seus filhos <browser> podem ser usados para configurar uma lista de servidores Selenium RC.

<selenium>
<browser name="Firefox no Linux"
browser="*firefox /usr/lib/firefox/firefox-bin"
host="my.linux.box"
port="4444"
timeout="30000"/>
</selenium>

O arquivo de configuração XML acima corresponde ao seguinte código PHP:

class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
public static $navegadores = array(
array(
'name' => 'Firefox no Linux',
'browser' => '*firefox /usr/lib/firefox/firefox-bin',
'host' => 'my.linux.box',
'port' => 4444,
'timeout' => 30000
)
);

// ...
}