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

PHPUnit

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

<phpunit
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.6/phpunit.xsd"
         backupGlobals="true"
         backupStaticAttributes="false"
         <!--bootstrap="/path/to/bootstrap.php"-->
         cacheTokens="false"
         colors="false"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         forceCoversAnnotation="false"
         mapTestClassNameToCoveredClassName="false"
         printerClass="PHPUnit_TextUI_ResultPrinter"
         <!--printerFile="/path/to/ResultPrinter.php"-->
         processIsolation="false"
         stopOnError="false"
         stopOnFailure="false"
         stopOnIncomplete="false"
         stopOnSkipped="false"
         testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"
         <!--testSuiteLoaderFile="/path/to/StandardTestSuiteLoader.php"-->
         timeoutForSmallTests="1"
         timeoutForMediumTests="10"
         timeoutForLargeTests="60"
         verbose="false">
  <!-- ... -->
</phpunit>

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

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

convertErrorsToExceptions

Por padrão, PHPUnit irá instalar um manipulador de erro que converte os seguintes erros para exceções:

  • E_WARNING
  • E_NOTICE
  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE
  • E_STRICT
  • E_RECOVERABLE_ERROR
  • E_DEPRECATED
  • E_USER_DEPRECATED

Definir convertErrorsToExceptions para false desabilita esta funcionalidade.

convertNoticesToExceptions

Quando definido para false, o manipulador de erro instalado pelo convertErrorsToExceptions não irá converter os erros E_NOTICE, E_USER_NOTICE, ou E_STRICT para exceções.

convertWarningsToExceptions

Quando definido para false, o manipulador de erro instalado pelo convertErrorsToExceptions não irá converter os erros E_WARNING ou E_USER_WARNING para exceções.

forceCoversAnnotation

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

timeoutForLargeTests

Se o limite de tempo baseado no tamanho do teste são forçados então esse atributo define o tempo limite para todos os testes marcados como @large. Se um teste não completa dentro do tempo limite configurado, irá falhar.

timeoutForMediumTests

Se o limite de tempo baseado no tamanho do teste são forçados então esse atributo define o tempo limite para todos os testes marcados como @medium. Se um teste não completa dentro do tempo limite configurado, irá falhar.

timeoutForSmallTests

Se o limite de tempo baseado no tamanho do teste são forçados então esse atributo define o tempo limite para todos os testes marcados como @medium ou @large. Se um teste não completa dentro do tempo limite configurado, irá falhar.

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="My Test Suite">
    <directory>/path/to/*Test.php files</directory>
    <file>/path/to/MyTest.php</file>
    <exclude>/path/to/exclude</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ínimo 5.3.0.

  <testsuites>
    <testsuite name="My Test Suite">
      <directory suffix="Test.php" phpVersion="5.3.0" phpVersionOperator=">=">/path/to/files</directory>
      <file phpVersion="5.3.0" phpVersionOperator=">=">/path/to/MyTest.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 marcados com a anotação @group (documentada na “@group”) que (não) deveriam ser executados.

<groups>
  <include>
    <group>name</group>
  </include>
  <exclude>
    <group>name</group>
  </exclude>
</groups>

A configuração XML acima corresponde a invocar o executor de testes TextUI com as seguintes opções:

  • --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">/path/to/files</directory>
    <file>/path/to/file</file>
    <exclude>
      <directory suffix=".php">/path/to/files</directory>
      <file>/path/to/file</file>
    </exclude>
  </blacklist>
  <whitelist processUncoveredFilesFromWhitelist="true">
    <directory suffix=".php">/path/to/files</directory>
    <file>/path/to/file</file>
    <exclude>
      <directory suffix=".php">/path/to/files</directory>
      <file>/path/to/file</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" 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 as seguintes opções:

  • --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 lowUpperBound, highLowerBound, logIncompleteSkipped e showUncoveredFiles não possuem opção de execução de teste TextUI equivalente.

  • lowUpperBound: Porcentagem máxima de cobertura para ser considerado "moderadamente" coberto.

  • highLowerBound: Porcentagem mínima de cobertura para ser considerado "altamente" coberto.

  • showUncoveredFiles: Mostra todos arquivos da lista-branca na saída --coverage-text não apenas aqueles com informação de cobertura.

  • showOnlySummary: Mostra somente o resumo na saída --coverage-text.

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="MyListener" file="/optional/path/to/MyListener.php">
    <arguments>
      <array>
        <element key="0">
          <string>Sebastian</string>
        </element>
      </array>
      <integer>22</integer>
      <string>April</string>
      <double>19.78</double>
      <null/>
      <object class="stdClass"/>
    </arguments>
  </listener>
</listeners>

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

$listener = new MyListener(
  array('Sebastian'),
  22,
  'April',
  19.78,
  NULL,
  new stdClass
);

Definindo configurações PHP INI, Constantes e Variáveis Globais

O elemento <php> e seus filhos podem ser usados para definir configurações do PHP, constantes e variáveis globais. 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 on 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 $browsers = array(
      array(
        'name'    => 'Firefox on Linux',
        'browser' => '*firefox /usr/lib/firefox/firefox-bin',
        'host'    => 'my.linux.box',
        'port'    => 4444,
        'timeout' => 30000
      )
    );

    // ...
}
Por favor, abra um chamado no GitHub para sugerir melhorias para esta página. Obrigado!