Capítulo 2. Escrevendo Testes para o PHPUnit

Exemplo 2.1 mostra como podemos escrever testes usando o PHPUnit que exercita operações de vetor do PHP. O exemplo introduz as convenções básicas e passos para escrever testes com o PHPUnit:

  1. Os testes para uma classe Classe vão dentro de uma classe ClasseTest.

  2. ClasseTest herda (na maioria das vezes) de PHPUnit_Framework_TestCase.

  3. Os testes são métodos públicos nomeados como test*.

    Alternativamente, você pode usar a anotação @test em um bloco de documentação de um método para marcá-lo como um método de teste.

  4. Dentro dos métodos de teste, métodos de confirmação como assertEquals() (veja “Asserções”) são usados para confirmar que um valor real equivale a um valor esperado.

Exemplo 2.1: Testando operações de vetores com o PHPUnit

<?php
class PilhaTest extends PHPUnit_Framework_TestCase
{
public function testPushEPop()
{
$pilha = array();
$this->assertEquals(0, count($pilha));

array_push($pilha, 'foo');
$this->assertEquals('foo', $pilha[count($pilha)-1]);
$this->assertEquals(1, count($pilha));

$this->assertEquals('foo', array_pop($pilha));
$this->assertEquals(0, count($pilha));
}
}
?>


 

Sempre que você estiver tentado a escrever algo em uma declaração print ou uma expressão depuradora, escreva como um teste em vez disso.

 
 --Martin Fowler

Dependências de Testes

 

Testes Unitários são primeiramente escritos como uma boa prática para ajudar desenvolvedores a identificar e corrigir defeitos, a refatorar o código e servir como documentação para uma unidade de programa sob teste. Para conseguir esses benefícios, testes unitários idealmente deveriam cobrir todos os caminhos possíveis em um programa. Um teste unitário geralmente cobre um caminho específico em uma função ou método. Porém um método de teste não é necessariamente uma entidade encapsulada e independente. Às vezes existem dependências implícitas entre métodos de teste, escondidas no cenário de implementação de um teste.

 
 --Adrian Kuhn et. al.

O PHPUnit suporta a declaração explícita de dependências entre métodos de teste. Tais dependências não definem a ordem em que os métodos de teste devem ser executados, mas permitem o retorno de uma instância do ambiente do teste por um produtor e a passagem dele para os consumidores dependentes.

  • Um produtor é um método de teste que dá como resultado sua unidade sob teste como um valor retornado.

  • Um consumidor é um método de teste que depende de um ou mais produtores e seus valores retornados.

Exemplo 2.2 mostra como usar a anotação @depends para expressar dependências entre métodos de teste.

Exemplo 2.2: Usando a anotação @depends para expressar dependências

<?php
class PilhaTest extends PHPUnit_Framework_TestCase
{
public function testVazio()
{
$pilha = array();
$this->assertEmpty($pilha);

return $pilha;
}

/**
* @depends testVazio
*/
public function testPush(array $pilha)
{
array_push($pilha, 'foo');
$this->assertEquals('foo', $pilha[count($pilha)-1]);
$this->assertNotEmpty($pilha);

return $pilha;
}

/**
* @depends testPush
*/
public function testPop(array $pilha)
{
$this->assertEquals('foo', array_pop($pilha));
$this->assertEmpty($pilha);
}
}
?>


No exemplo acima o primeiro teste, testVazio(), cria um novo vetor e assegura que o mesmo é vazio. O teste então retorna o ambiente como resultado. O segundo teste, testPush(), depende de testVazio() e lhe é passado o resultado do qual ele depende como um argumento. Finalmente, testPop() depende de testPush().

Para localizar defeitos rapidamente, queremos nossa atenção focada nas falhas relevantes dos testes. É por isso que o PHPUnit pula a execução de um teste quando um teste do qual ele depende falha. Isso melhora a localização de defeitos por explorar as dependências entre os testes como mostrado em Exemplo 2.3.

Exemplo 2.3: Explorando as dependências entre os testes

<?php
class FalhaDependenciaTest extends PHPUnit_Framework_TestCase
{
public function testUm()
{
$this->assertTrue(FALSE);
}

/**
* @depends testUm
*/
public function testDois()
{
}
}
?>
phpunit --verbose FalhaDependenciaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

FS

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) FalhaDependenciaTest::testUm
Failed asserting that false is true.

/home/sb/FalhaDependenciaTest.php:6

There was 1 skipped test:

1) FalhaDependenciaTest::testDois
This test depends on "FalhaDependenciaTest::testUm" to pass.


FAILURES!
Tests: 1, Assertions: 1, Failures: 1, Skipped: 1.


Um teste pode ter mais de uma anotação @depends. O PHPUnit não muda a ordem em que os testes são executados, portanto você deve se certificar de que as dependências de um teste podem realmente ser encontradas antes de executar o teste.

Provedores de Dados

Um método de teste pode aceitar argumentos arbitrários. Esses argumentos devem ser fornecidos por um método provedor de dados (provedor() em Exemplo 2.4). O método provedor de dados a ser usado é especificado usando a anotação @dataProvider.

Um método provedor de dados deve ser public e ou retornar um vetor de vetores ou um objeto que implementa a interface Iterator e produz um vetor para cada passo da iteração. Para cada vetor que é parte da coleção o método de teste será chamado com os conteúdos do vetor como seus argumentos.

Exemplo 2.4: Usando um provedor de dados que retorna um vetor de vetores

<?php
class DadosTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provedor
*/
public function testSoma($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}

public function provedor()
{
return array(
array(0, 0, 0),
array(0, 1, 1),
array(1, 0, 1),
array(1, 1, 3)
);
}
}
?>
phpunit DadosTest
PHPUnit 4.2.0 by Sebastian Bergmann.

...F

Time: 0 seconds, Memory: 5.75Mb

There was 1 failure:

1) DadosTest::testSoma with data set #3 (1, 1, 3)
Failed asserting that 2 matches expected 3.

/home/sb/DadosTest.php:9

FAILURES!
Tests: 4, Assertions: 4, Failures: 1.


Exemplo 2.5: Usando um provedor de dados que retorna um objeto Iterador

<?php
require 'ArquivoCsvIterador.php';

class DadosTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provedor
*/
public function testSoma($a, $b, $c)
{
$this->assertEquals($c, $a + $b);
}

public function provedor()
{
return new ArquivoCsvIterador('dados.csv');
}
}
?>
phpunit DadosTest
PHPUnit 4.2.0 by Sebastian Bergmann.

...F

Time: 0 seconds, Memory: 5.75Mb

There was 1 failure:

1) DadosTest::testSoma with data set #3 ('1', '1', '3')
Failed asserting that 2 matches expected '3'.

/home/sb/DadosTest.php:11

FAILURES!
Tests: 4, Assertions: 4, Failures: 1.


Exemplo 2.6: A classe ArquivoCsvIterador

<?php
class ArquivoCsvIterador implements Iterator {
protected $arquivo;
protected $chave = 0;
protected $atual;

public function __construct($arquivo) {
$this->arquivo = fopen($arquivo, 'r');
}

public function __destruct() {
fclose($this->arquivo);
}

public function rebobinar() {
rebobinar($this->arquivo);
$this->atual = fgetcsv($this->arquivo);
$this->chave = 0;
}

public function valido() {
return !feof($this->arquivo);
}

public function chave() {
return $this->chave;
}

public function atual() {
return $this->atual;
}

public function proximo() {
$this->atual = fgetcsv($this->arquivo);
$this->chave++;
}
}
?>


Nota

Quando um teste recebe uma entrada tanto de um método @dataProvider quanto de um ou mais testes dos quais ele @depends, os argumentos do provedor de dados virão antes daqueles dos quais ele é dependente.

Nota

Quando um teste depende de um teste que usa provedores de dados, o teste dependente será executado quando o teste do qual ele depende for bem sucedido em pelo menos uma seção de dados. O resultado de um teste que usa provedores de dados não pode ser injetado dentro de um teste dependente.

Nota

Todos os provedores de dados são executados antes da primeira chamada à função setUp. Por isso você não pode acessar quaisquer variáveis que criar ali de dentro de um provedor de dados.

Testando Exceções

Exemplo 2.7 mostra como usar a anotação @expectedException para testar se uma exceção foi lançada dentro do código de teste.

Exemplo 2.7: Usando a anotação @expectedException

<?php
class ExcecaoTest extends PHPUnit_Framework_TestCase
{
/**
* @expectedException InvalidArgumentException
*/
public function testExcecao()
{
}
}
?>
phpunit ExcecaoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ExcecaoTest::testExcecao
Expected exception InvalidArgumentException


FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


Adicionalmente, você pode usar @expectedExceptionMessage e @expectedExceptionCode em combinação com @expectedException para testar a mensagem de exceção e o código de exceção como mostrado em Exemplo 2.8.

Exemplo 2.8: Usando as anotações @expectedExceptionMessage e @expectedExceptionCode

<?php
class ExcecaoTest extends PHPUnit_Framework_TestCase
{
/**
* @expectedException InvalidArgumentException
* @expectedExceptionMessage Mensagem Certa
*/
public function testExcecaoTemMensagemCerta()
{
throw new InvalidArgumentException('Alguma Mensagem', 10);
}

/**
* @expectedException InvalidArgumentException
* @expectedExceptionCode 20
*/
public function testExcecaoTemCodigoCerto()
{
throw new InvalidArgumentException('Alguma Mensagem', 10);
}
}
?>
phpunit ExcecaoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

FF

Time: 0 seconds, Memory: 3.00Mb

There were 2 failures:

1) ExcecaoTest::testExcecaoTemMensagemCerta
Failed asserting that exception message 'Alguma Mensagem' contains 'Mensagem Certa'.


2) ExcecaoTest::testExcecaoTemCodigoCerto
Failed asserting that expected exception code 20 is equal to 10.


FAILURES!
Tests: 2, Assertions: 4, Failures: 2.


Mais exemplos de @expectedExceptionMessage e @expectedExceptionCode são mostrados em “@expectedExceptionMessage” e “@expectedExceptionCode” respectivamente.

Alternativamente, você pode usar o método setExpectedException() para definir a exceção esperada como mostrado em Exemplo 2.9.

Exemplo 2.9: Esperando uma exceção surgir do código de teste

<?php
class ExcecaoTest extends PHPUnit_Framework_TestCase
{
public function testExcecao()
{
$this->setExpectedException('InvalidArgumentException');
}

public function testExcecaoTemMensagemCerta()
{
$this->setExpectedException(
'InvalidArgumentException', 'Mensagem Certa'
);
throw new InvalidArgumentException('Alguma Mensagem', 10);
}

public function testExcecaoTemCodigoCerto()
{
$this->setExpectedException(
'InvalidArgumentException', 'Mensagem Certa', 20
);
throw new InvalidArgumentException('A Mensagem Certa', 10);
}
}?>
phpunit ExcecaoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

FFF

Time: 0 seconds, Memory: 3.00Mb

There were 3 failures:

1) ExcecaoTest::testExcecao
Expected exception InvalidArgumentException


2) ExcecaoTest::testExcecaoTemMensagemCerta
Failed asserting that exception message 'Alguma Mensagem' contains 'Mensagem Certa'.


3) ExcecaoTest::testExcecaoTemCodigoCerto
Failed asserting that expected exception code 20 is equal to 10.


FAILURES!
Tests: 3, Assertions: 6, Failures: 3.


Tabela 2.1 mostra os métodos fornecidos para testar exceções.

Tabela 2.1. Métodos para testar exceções

MétodoSignificado
void setExpectedException(string $nomeExcecao[, string $mensagemExcecao = '', inteiro $codigoExcecao = NULL])Define os $nomeExcecao, $mensagemExcecao, e $codigoExcecao. esperados.
String getExpectedException()Retorna o nome da exceção esperada.


Você também pode usar a abordagem mostrada em Exemplo 2.10 para testar exceções

Exemplo 2.10: Abordagem alternativa para testar exceções

<?php
class ExcecaoTest extends PHPUnit_Framework_TestCase {
public function testExcecao() {
try {
// ... Código que se espera que lance uma exceção ...
}

catch (InvalidArgumentException $esperado) {
return;
}

$this->fail('Uma exceção esperada não foi criada.');
}
}
?>


Se o código que se espera que crie uma exceção em Exemplo 2.10 não criá-la, a chamada subsequente ao fail() vai parar o teste e sinalizar um problema com o teste. Se a exceção esperada aparecer, o bloco catch será executado, e o teste terminará com sucesso.

Testando Erros PHP

Por padrão o PHPUnit converte os erros, avisos e notificações do PHP que são disparados durante a execução de um teste para uma exceção. Usando essas exceções você pode, por exemplo, esperar que um teste dispare um erro PHP como mostrado Exemplo 2.11.

Exemplo 2.11: Esperando um erro PHP usando @expectedException

<?php
class ErroEsperadoTest extends PHPUnit_Framework_TestCase
{
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testFalhaInclusao()
{
include 'arquivo_nao_existente.php';
}
}
?>
phpunit ErroEsperadoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 5.25Mb

OK (1 test, 1 assertion)


PHPUnit_Framework_Error_Notice e PHPUnit_Framework_Error_Warning representam notificações e avisos do PHP, respectivamente.

Nota

Você deve ser o mais específico possível quando testar exceções. Testar por classes que são muito genéricas pode causar efeitos colaterais indesejáveis. Da mesma forma, testar para a classe Exception com @expectedException ou setExpectedException() não é mais permitido.

Ao testar com funções que dependem de funções php que disparam erros como fopen pode ser útil algumas vezes usar a supressão de erros enquanto testa. Isso permite a você verificar os valores retornados por suprimir notificações que levariam a um PHPUnit_Framework_Error_Notice.

Exemplo 2.12: Testando valores retornados do código que utiliza PHP Errors

<?php
class SupressaoErroTest extends PHPUnit_Framework_TestCase
{
public function testEscrevendoArquivo() {
$escritor = new EscritorArquivo;
$this->assertFalse(@$escritor->escrever('/nao-pode-escrever/arquivo', 'coisas'));
}
}
class EscritorArquivo
{
public function escrever($arquivo, $conteudo) {
$arquivo = fopen($arquivo, 'w');
if($arquivo == false) {
return false;
}
// ...
}
}

?>
phpunit SupressaoErroTest
PHPUnit 4.2.0 by Sebastian Bergmann.

.

Time: 1 seconds, Memory: 5.25Mb

OK (1 test, 1 assertion)



Sem a supressão de erros o teste teria relatado uma falha fopen(/nao-pode-escrever/arquivo): failed to open stream: No such file or directory.

Testando Saídas

Às vezes você quer assegurar que a execução de um método, por exemplo, gera uma saída esperada (via echo ou print, por exemplo). A classe PHPUnit_Framework_TestCase usa a função Output Buffering para prover a funcionalidade necessária para isso.

Exemplo 2.13 mostra como usar o método expectOutputString() para definir a saída esperada. Se essa saída esperada não for gerada, o teste será contado como uma falha.

Exemplo 2.13: Testando a saída de uma função ou método

<?php
class SaidaTest extends PHPUnit_Framework_TestCase
{
public function testEsperadoFooRealFoo()
{
$this->expectOutputString('foo');
print 'foo';
}

public function testEsperadoBarRealBaz()
{
$this->expectOutputString('bar');
print 'baz';
}
}
?>
phpunit SaidaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

.F

Time: 0 seconds, Memory: 5.75Mb

There was 1 failure:

1) SaidaTest::testEsperadoBarRealBaz
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'bar'
+'baz'


FAILURES!
Tests: 2, Assertions: 2, Failures: 1.


Tabela 2.2 mostra os métodos fornecidos para testar saídas.

Tabela 2.2. Métodos para testar a saída

MétodoSignificado
void expectOutputRegex(string $expressaoRegular)Define a saída que se espera combinar com a $expressaoRegular.
void expectOutputString(string $stringEsperada)Define a saída que se espera ser igual a uma $stringEsperada.
booleano setOutputCallback(callable $callback)Define um retorno que é usado, por exemplo, para normalizar a saída real.


Nota

Por favor, note que o PHPUnit engole todas as saídas que são emitidas durante a execução de um teste. Para ser mais exato, um teste que emite uma saída vai falhar.

Asserções

Esta seção lista os vários métodos de asserção (assertion) disponíveis.

assertArrayHasKey()

assertArrayHasKey(misto $chave, vetor $vetor[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $vetor não tiver a $chave.

assertArrayNotHasKey() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.14: Uso de assertArrayHasKey()

<?php
class VetorTemChaveTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertArrayHasKey('foo', array('bar' => 'baz'));
}
}
?>
phpunit VetorTemChaveTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) VetorTemChaveTest::testFalha
Failed asserting that an array has the key 'foo'.

/home/sb/VetorTemChaveTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertClassHasAttribute()

assertClassHasAttribute(string $nomeAtributo, string $nomeClasse[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $nomeClasse::nomeAtributo não existir.

assertClassNotHasAttribute() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.15: Uso de assertClassHasAttribute()

<?php
class ClasseTemAtributoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertClassHasAttribute('foo', 'stdClass');
}
}
?>
phpunit ClasseTemAtributoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ClasseTemAtributoTest::testFalha
Failed asserting that class "stdClass" has attribute "foo".

/home/sb/ClasseTemAtributoTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertClassHasStaticAttribute()

assertClassHasStaticAttribute(string $nomeAtributo, string $nomeClasse[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $nomeClasse::nomeAtributo não existir.

assertClassNotHasStaticAttribute() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.16: Uso de assertClassHasStaticAttribute()

<?php
class ClasseTemAtributoEstaticoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertClassHasStaticAttribute('foo', 'stdClass');
}
}
?>
phpunit ClasseTemAtributoEstaticoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ClasseTemAtributoEstaticoTest::testFalha
Failed asserting that class "stdClass" has static attribute "foo".

/home/sb/ClasseTemAtributoEstaticoTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertContains()

assertContains(misto $agulha, Iterador|vetor $bateria[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $agulha não for um elemento de $bateria.

assertNotContains() é o inverso desta asserção e recebe os mesmos argumentos.

assertAttributeContains() e assertAttributeNotContains() são empacotadores de conveniência que usam um atributo public, protected, ou private de uma classe ou objeto como a bateria (vetor que é um conjunto de pilhas).

Exemplo 2.17: Uso de assertContains()

<?php
class ContemTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertContains(4, array(1, 2, 3));
}
}
?>
phpunit ContemTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) ContemTest::testFalha
Failed asserting that an array contains 4.

/home/sb/ContemTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertContains(string $agulha, string $bateria[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $agulha não for uma substring de $bateria.

Exemplo 2.18: Uso de assertContains()

<?php
class ContemTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertContains('baz', 'foobar');
}
}
?>
phpunit ContemTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) ContemTest::testFalha
Failed asserting that 'foobar' contains "baz".

/home/sb/ContemTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertContainsOnly()

assertContainsOnly(string $tipo, Iterador|vetor $bateria[, booleano $ehTipoNativo = NULL, string $mensagem = ''])

Relata um erro identificado por $mensagem se $bateria não contiver apenas variáveis do tipo $tipo.

$ehTipoNativo é uma bandeira usada para indicar se $tipo é um tipo nativo do PHP ou não.

assertNotContainsOnly() é o inverso desta asserção e recebe os mesmos argumentos.

assertAttributeContainsOnly() e assertAttributeNotContainsOnly() são empacotadores de conveniência que usam um atributo public, protected, ou private de uma classe ou objeto como o valor real.

Exemplo 2.19: Uso de assertContainsOnly()

<?php
class ContemApenasTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertContainsOnly('string', array('1', '2', 3));
}
}
?>
phpunit ContemApenasTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) ContemApenasTest::testFalha
Failed asserting that Array (
0 => '1'
1 => '2'
2 => 3
) contains only values of type "string".

/home/sb/ContemApenasTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertContainsOnlyInstancesOf()

assertContainsOnlyInstancesOf(string $nomeclasse, Traversable|vetor $bateria[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $bateria não contiver apenas instâncias da classe $nomeclasse.

Exemplo 2.20: Uso de assertContainsOnlyInstancesOf()

<?php
class ContemApenasInstanciasDeTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertContainsOnlyInstancesOf('Foo', array(new Foo(), new Bar(), new Foo()));
}
}
?>
phpunit ContemApenasInstanciasDeTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) ContemApenasInstanciasDeTest::testFalha
Failed asserting that Array ([0]=> Bar Object(...)) is an instance of class "Foo".

/home/sb/ContemApenasInstanciasDeTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertCount()

assertCount($contaEsperada, $bateria[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o número de elementos em $bateria não for $contaEsperada.

assertNotCount() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.21: Uso de assertCount()

<?php
class ContaTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertCount(0, array('foo'));
}
}
?>
phpunit ContaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ContaTest::testFalha
Failed asserting that actual size 1 matches expected size 0.

/home/sb/ContaTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertEmpty()

assertEmpty(misto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $real não estiver vazio.

assertNotEmpty() é o inverso desta asserção e recebe os mesmos argumentos.

assertAttributeEmpty() e assertAttributeNotEmpty() são empacotadores de conveniência que podem ser aplicados a um atributo public, protected, ou private de uma classe ou objeto.

Exemplo 2.22: Uso de assertEmpty()

<?php
class VazioTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertEmpty(array('foo'));
}
}
?>
phpunit VazioTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) VazioTest::testFalha
Failed asserting that an array is empty.

/home/sb/VazioTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertEqualXMLStructure()

assertEqualXMLStructure(DOMElement $elementoEsperado, DOMElement $elementoReal[, booleano $verificarAtributos = FALSE, string $mensagem = ''])

Relata um erro identificado por $mensagem se a Estrutura XML do DOMElement em $elementoReal não é igual à estrutura XML do DOMElement em $elementoEsperado.

Exemplo 2.23: Uso de assertEqualXMLStructure()

<?php
class IgualaEstruturaXMLTest extends PHPUnit_Framework_TestCase
{
public function testFalhaComNomesDeNosDiferentes()
{
$esperado = new DOMElement('foo');
$real = new DOMElement('bar');

$this->assertEqualXMLStructure($esperado, $real);
}

public function testFalhaComAtributosDeNosDiferentes()
{
$esperado = new DOMDocument;
$esperado->loadXML('<foo bar="true" />');

$real = new DOMDocument;
$real->loadXML('<foo/>');

$this->assertEqualXMLStructure(
$esperado->firstChild, $real->firstChild, TRUE
);
}

public function testFalhaComContagemDeFilhosDiferente()
{
$esperado = new DOMDocument;
$esperado->loadXML('<foo><bar/><bar/><bar/></foo>');

$real = new DOMDocument;
$real->loadXML('<foo><bar/></foo>');

$this->assertEqualXMLStructure(
$esperado->firstChild, $real->firstChild
);
}

public function testFalhaComFilhosDiferentes()
{
$esperado = new DOMDocument;
$esperado->loadXML('<foo><bar/><bar/><bar/></foo>');

$real = new DOMDocument;
$real->loadXML('<foo><baz/><baz/><baz/></foo>');

$this->assertEqualXMLStructure(
$esperado->firstChild, $real->firstChild
);
}
}
?>
phpunit IgualaEstruturaXMLTest
PHPUnit 4.2.0 by Sebastian Bergmann.

FFFF

Time: 0 seconds, Memory: 5.75Mb

There were 4 failures:

1) IgualaEstruturaXMLTest::testFalhaComNomesDeNosDiferentes
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'foo'
+'bar'

/home/sb/IgualaEstruturaXMLTest.php:9

2) IgualaEstruturaXMLTest::testFalhaComAtributosDeNosDiferentes
Number of attributes on node "foo" does not match
Failed asserting that 0 matches expected 1.

/home/sb/IgualaEstruturaXMLTest.php:22

3) IgualaEstruturaXMLTest::testFalhaComContagemDeFilhosDiferente
Number of child nodes of "foo" differs
Failed asserting that 1 matches expected 3.

/home/sb/IgualaEstruturaXMLTest.php:35

4) IgualaEstruturaXMLTest::testFalhaComFilhosDiferentes
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'bar'
+'baz'

/home/sb/IgualaEstruturaXMLTest.php:48

FAILURES!
Tests: 4, Assertions: 8, Failures: 4.


assertEquals()

assertEquals(misto $esperado, misto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se as duas variáveis $esperado e $real não forem iguais.

assertNotEquals() é o inverso desta asserção e recebe os mesmos argumentos.

assertAttributeEquals() e assertAttributeNotEquals() são empacotadores de conveniência que usam um atributo public, protected, ou private de uma classe ou objeto como valor real.

Exemplo 2.24: Uso de assertEquals()

<?php
class IgualaTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertEquals(1, 0);
}

public function testFalha2()
{
$this->assertEquals('bar', 'baz');
}

public function testFalha3()
{
$this->assertEquals("foo\nbar\nbaz\n", "foo\nbah\nbaz\n");
}
}
?>
phpunit IgualaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

FFF

Time: 0 seconds, Memory: 5.25Mb

There were 3 failures:

1) IgualaTest::testFalha
Failed asserting that 0 matches expected 1.

/home/sb/IgualaTest.php:6

2) IgualaTest::testFalha2
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'bar'
+'baz'

/home/sb/IgualaTest.php:11

3) IgualaTest::testFalha3
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
 'foo
-bar
+bah
 baz
 '

/home/sb/IgualaTest.php:16

FAILURES!
Tests: 3, Assertions: 3, Failures: 3.


Veja abaixo comparações mais especializadas são usadas para tipos específicos de argumentos para $esperado e $real.

assertEquals(float $esperado, float $real[, string $mensagem = '', float $delta = 0])

Relata um erro identificado por $mensagem se os dois ponto-flutuantes $esperado e $real não estiverem contidos no $delta de cada um.

Por favor, leia "O que cada cientista da computação deveria saber sobre aritmética de ponto-flutuante" para entender porque $delta é necessário.

Exemplo 2.25: Uso de assertEquals() com ponto-flutuantes

<?php
class IgualaTest extends PHPUnit_Framework_TestCase
{
public function testPassa()
{
$this->assertEquals(1.0, 1.1, '', 0.2);
}

public function testFalha()
{
$this->assertEquals(1.0, 1.1);
}
}
?>
phpunit IgualaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

.F

Time: 0 seconds, Memory: 5.75Mb

There was 1 failure:

1) IgualaTest::testFalha
Failed asserting that 1.1 matches expected 1.0.

/home/sb/IgualaTest.php:11

FAILURES!
Tests: 2, Assertions: 2, Failures: 1.


assertEquals(DOMDocument $esperado, DOMDocument $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o canônico não-comentado dos documentos XML representados pelos dois objetos DOMDocument $esperado e $real não forem iguais.

Exemplo 2.26: Uso de assertEquals() com objetos DOMDocument

<?php
class IgualaTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$esperado = new DOMDocument;
$esperado->loadXML('<foo><bar/></foo>');

$real = new DOMDocument;
$real->loadXML('<bar><foo/></bar>');

$this->assertEquals($esperado, $real);
}
}
?>
phpunit IgualaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) IgualaTest::testFalha
Failed asserting that two DOM documents are equal.
--- Expected
+++ Actual
@@ @@
<?xml version="1.0"?>
-<foo>
- <bar/>
-</foo>
+<bar>
+ <foo/>
+</bar>

/home/sb/IgualaTest.php:12

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertEquals(objeto $esperado, objeto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se os dois objetos $esperado e $real não tiverem os mesmos valores de atributos.

Exemplo 2.27: Uso de assertEquals() com objetos

<?php
class IgualaTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$esperado = new stdClass;
$esperado->foo = 'foo';
$esperado->bar = 'bar';

$real = new stdClass;
$real->foo = 'bar';
$real->baz = 'bar';

$this->assertEquals($esperado, $real);
}
}
?>
phpunit IgualaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) IgualaTest::testFalha
Failed asserting that two objects are equal.
--- Expected
+++ Actual
@@ @@
stdClass Object (
- 'foo' => 'foo'
- 'bar' => 'bar'
+ 'foo' => 'bar'
+ 'baz' => 'bar'
)

/home/sb/IgualaTest.php:14

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertEquals(vetor $esperado, vetor $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se os dois vetores $esperado e $real não forem iguais.

Exemplo 2.28: Uso de assertEquals() com vetores

<?php
class IgualaTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertEquals(array('a', 'b', 'c'), array('a', 'c', 'd'));
}
}
?>
phpunit IgualaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) IgualaTest::testFalha
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
Array (
0 => 'a'
- 1 => 'b'
- 2 => 'c'
+ 1 => 'c'
+ 2 => 'd'
)

/home/sb/IgualaTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertFalse()

assertFalse(booleano $condicao[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $condicao for TRUE.

assertNotFalse() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.29: Uso de assertFalse()

<?php
class FalsoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertFalse(TRUE);
}
}
?>
phpunit FalsoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) FalsoTest::testFalha
Failed asserting that true is false.

/home/sb/FalsoTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertFileEquals()

assertFileEquals(string $esperado, string $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o arquivo especificado por $esperado não tiver o mesmo conteúdo que o arquivo especificado por $real.

assertFileNotEquals() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.30: Uso de assertFileEquals()

<?php
class ArquivoIgualaTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertFileEquals('/home/sb/esperado', '/home/sb/real');
}
}
?>
phpunit ArquivoIgualaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) ArquivoIgualaTest::testFalha
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'esperado
+'real
 '

/home/sb/ArquivoIgualaTest.php:6

FAILURES!
Tests: 1, Assertions: 3, Failures: 1.


assertFileExists()

assertFileExists(string $nomearquivo[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o arquivo especificado por $nomearquivo não existir.

assertFileNotExists() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.31: Uso de assertFileExists()

<?php
class ArquivoExisteTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertFileExists('/caminho/para/arquivo');
}
}
?>
phpunit ArquivoExisteTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ArquivoExisteTest::testFalha
Failed asserting that file "/caminho/para/arquivo" exists.

/home/sb/ArquivoExisteTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertGreaterThan()

assertGreaterThan(misto $esperado, misto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o valor de $real não for maior que o valor de $esperado.

assertAttributeGreaterThan() é um empacotador de conveniência que usa um atributo public, protected, ou private de uma classe ou objeto como valor real.

Exemplo 2.32: Uso de assertGreaterThan()

<?php
class MaiorQueTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertGreaterThan(2, 1);
}
}
?>
phpunit MaiorQueTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) MaiorQueTest::testFalha
Failed asserting that 1 is greater than 2.

/home/sb/MaiorQueTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertGreaterThanOrEqual()

assertGreaterThanOrEqual(misto $esperado, misto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o valor de $real não for maior ou igual ao valor de $esperado.

assertAttributeGreaterThanOrEqual() é um empacotador de conveniência que usa public, protected, ou private de uma classe ou objeto como o valor real.

Exemplo 2.33: Uso de assertGreaterThanOrEqual()

<?php
class MaiorOuIgualTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertGreaterThanOrEqual(2, 1);
}
}
?>
phpunit MaiorOuIgualTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) MaiorOuIgualTest::testFalha
Failed asserting that 1 is equal to 2 or is greater than 2.

/home/sb/MaiorOuIgualTest.php:6

FAILURES!
Tests: 1, Assertions: 2, Failures: 1.


assertInstanceOf()

assertInstanceOf($esperado, $real[, $mensagem = ''])

Relata um erro identificado por $mensagem se $real não for uma instância de $esperado.

assertNotInstanceOf() é o inverso desta asserção e recebe os mesmos argumentos..

assertAttributeInstanceOf() e assertAttributeNotInstanceOf() são empacotadores de conveniência que podem ser aplicados a atributos public, protected, ou private de uma classe ou objeto.

Exemplo 2.34: Uso de assertInstanceOf()

<?php
class InstanciaDeTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertInstanceOf('RuntimeException', new Exception);
}
}
?>
phpunit InstanciaDeTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) InstanciaDeTest::testFalha
Failed asserting that Exception Object (...) is an instance of class "RuntimeException".

/home/sb/InstanciaDeTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertInternalType()

assertInternalType($esperado, $real[, $mensagem = ''])

Relata um erro identificado por $mensagem se $real não for do tipo $esperado.

assertNotInternalType() é o inverso desta asserção e recebe os mesmos argumentos.

assertAttributeInternalType() e assertAttributeNotInternalType() são empacotadores de conveniência que podem ser aplicados a atributos public, protected, ou private de uma classe ou objeto.

Exemplo 2.35: Uso de assertInternalType()

<?php
class TipoInternoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertInternalType('string', 42);
}
}
?>
phpunit TipoInternoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) TipoInternoTest::testFalha
Failed asserting that 42 is of type "string".

/home/sb/TipoInternoTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertJsonFileEqualsJsonFile()

assertJsonFileEqualsJsonFile(misto $arquivoEsperado, misto $arquivoReal[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o valor de $arquivoReal equivaler ao valor de $arquivoEsperado.

Exemplo 2.36: Uso de assertJsonFileEqualsJsonFile()

<?php
class ArquivoJsonIgualaArquivoJsonTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertJsonFileEqualsJsonFile(
'caminho/para/arquivo/esperado', 'caminho/para/arquivo/real');
}
}
?>
phpunit ArquivoJsonIgualaArquivoJsonTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) JsonFileEqualsJsonFile::testFalha
Failed asserting that '{"Mascott":"Tux"}' matches JSON string "["Mascott", "Tux", "OS", "Linux"]".

/home/sb/ArquivoJsonIgualaArquivoJsonTest.php:5

FAILURES!
Tests: 1, Assertions: 3, Failures: 1.


assertJsonStringEqualsJsonFile()

assertJsonStringEqualsJsonFile(misto $arquivoEsperado, misto $jsonReal[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o valor de $jsonReal equivaler ao valor de $arquivoEsperado.

Exemplo 2.37: Uso de assertJsonStringEqualsJsonFile()

<?php
class StringJsonIgualaArquivoJsonTest extends PHPUnit_Framework_TestCase
{
    public function testFalha()
    {
        $this->assertJsonStringEqualsJsonFile(
            'caminho/para/arquivo/ambiente', json_encode(array("Mascott" => "ux"))
        );
    }
}
?>
phpunit StringJsonIgualaArquivoJsonTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) JsonStringEqualsJsonFile::testFalha
Failed asserting that '{"Mascott":"ux"}' matches JSON string "{"Mascott":"Tux"}".

/home/sb/StringJsonIgualaArquivoJsonTest.php:5

FAILURES!
Tests: 1, Assertions: 3, Failures: 1.


assertJsonStringEqualsJsonString()

assertJsonStringEqualsJsonString(misto $jsonEsperado, misto $jsonReal[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o valor de $jsonReal equivaler ao valor de $jsonEsperado.

Exemplo 2.38: Uso de assertJsonStringEqualsJsonString()

<?php
class StringJsonIgualaStringJsonTest extends PHPUnit_Framework_TestCase
{
    public function testFalha()
    {
        $this->assertJsonStringEqualsJsonString(
            json_encode(array("Mascott" => "Tux")), json_encode(array("Mascott" => "ux"))
        );
    }
}
?>
phpunit StringJsonIgualaStringJsonTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) StringJsonIgualaStringJsonTest::testFalha
Failed asserting that two objects are equal.
--- Expected
+++ Actual
@@ @@
 stdClass Object (
 - 'Mascott' => 'Tux'
 + 'Mascott' => 'ux'
)

/home/sb/StringJsonIgualaStringJsonTest.php:5

FAILURES!
Tests: 1, Assertions: 3, Failures: 1.


assertLessThan()

assertLessThan(misto $esperado, misto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o valor de $real não for menor que o valor de $esperado.

assertAttributeLessThan() é um empacotador de conveniência que usa um atributo public, protected, ou private de uma classe ou objeto como valor real.

Exemplo 2.39: Uso de assertLessThan()

<?php
class MenorQueTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertLessThan(1, 2);
}
}
?>
phpunit MenorQueTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) MenorQueTest::testFalha
Failed asserting that 2 is less than 1.

/home/sb/MenorQueTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertLessThanOrEqual()

assertLessThanOrEqual(misto $esperado, misto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o valor de $real não for menor ou igual ao valor de $esperado.

assertAttributeLessThanOrEqual() é um empacotador de conveniência que usa um atributo public, protected, ou private de uma classe ou objeto como valor real.

Exemplo 2.40: Uso de assertLessThanOrEqual()

<?php
class MenorOuIgualTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertLessThanOrEqual(1, 2);
}
}
?>
phpunit MenorOuIgualTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) MenorOuIgualTest::testFalha
Failed asserting that 2 is equal to 1 or is less than 1.

/home/sb/LessThanOrEqualTest.php:6

FAILURES!
Tests: 1, Assertions: 2, Failures: 1.


assertNull()

assertNull(misto $variavel[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $variavel não for NULL.

assertNotNull() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.41: Uso de assertNull()

<?php
class NuloTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertNull('foo');
}
}
?>
phpunit NaoNuloTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) NuloTest::testFalha
Failed asserting that 'foo' is null.

/home/sb/NuloTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertObjectHasAttribute()

assertObjectHasAttribute(string $nomeAtributo, objeto $objeto[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $objeto->nomeAtributo não existir.

assertObjectNotHasAttribute() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.42: Uso de assertObjectHasAttribute()

<?php
class ObjetoTemAtributoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertObjectHasAttribute('foo', new stdClass);
}
}
?>
phpunit ObjetoTemAtributoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ObjetoTemAtributoTest::testFalha
Failed asserting that object of class "stdClass" has attribute "foo".

/home/sb/ObjetoTemAtributoTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertRegExp()

assertRegExp(string $padrao, string $string[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $string não combinar com a expressão regular $padrao.

assertNotRegExp() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.43: Uso de assertRegExp()

<?php
class ExpressaoRegularTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertRegExp('/foo/', 'bar');
}
}
?>
phpunit ExpressaoRegularTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) ExpressaoRegularTest::testFalha
Failed asserting that 'bar' matches PCRE pattern "/foo/".

/home/sb/ExpressaoRegularTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertStringMatchesFormat()

assertStringMatchesFormat(string $formato, string $string[, string $mensagem = ''])

Relata um erro identificado por $mensagem se a $string não combinar com a string $formato.

assertStringNotMatchesFormat() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.44: Uso de assertStringMatchesFormat()

<?php
class StringEquivaleFormatoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertStringMatchesFormat('%i', 'foo');
}
}
?>
phpunit StringEquivaleFormatoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) StringEquivaleFormatoTest::testFalha
Failed asserting that 'foo' matches PCRE pattern "/^[+-]?\d+$/s".

/home/sb/StringEquivaleFormatoTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


A string de formato pode conter os seguintes espaços reservados:

  • %e: Representa um separador de diretório, por exemplo / no Linux.

  • %s: Um ou mais de qualquer coisa (caractere ou espaço em branco) exceto no último caractere da linha.

  • %S: Zero ou mais de qualquer coisa (caractere ou espaço em branco) exceto no último caractere da linha.

  • %a: Um ou mais de qualquer coisa (caractere ou espaço em branco) inclusive no último caractere da linha.

  • %A: Zero ou mais de qualquer coisa (caractere ou espaço em branco) inclusive no último caractere da linha.

  • %w: Zero ou mais caracteres de espaço em branco.

  • %i: Um valor inteiro sinalizado, por exemplo +3142, -3142.

  • %d: Um valor inteiro não-sinalizado, por exemplo 123456.

  • %x: Um ou mais caracteres hexadecimais. Isto é, caracteres dentro de 0-9, a-f, A-F.

  • %f: Um número de ponto flutuante, por exemplo: 3.142, -3.142, 3.142E-10, 3.142e+10.

  • %c: Um caractere único de qualquer tipo.

assertStringMatchesFormatFile()

assertStringMatchesFormatFile(string $formatoArquivo, string $string[, string $mensagem = ''])

Relata um erro identificado por $mensagem se a $string não combinar com os conteúdos de $formatoArquivo.

assertStringNotMatchesFormatFile() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.45: Uso de assertStringMatchesFormatFile()

<?php
class StringEquivaleFormatoArquivoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertStringMatchesFormatFile('/caminho/para/esperado.txt', 'foo');
}
}
?>
phpunit StringEquivaleFormatoArquivoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) StringEquivaleFormatoArquivoTest::testFalha
Failed asserting that 'foo' matches PCRE pattern "/^[+-]?\d+
$/s".

/home/sb/StringEquivaleFormatoArquivoTest.php:6

FAILURES!
Tests: 1, Assertions: 2, Failures: 1.


assertSame()

assertSame(misto $esperado, misto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se as duas variáveis $esperado e $real não tiverem o mesmo tipo e valor.

assertNotSame() é o inverso desta asserção e recebe os mesmos argumentos.

assertAttributeSame() e assertAttributeNotSame() são empacotadores de conveniência que usam um atributo public, protected, ou private de uma classe ou objeto como valor real.

Exemplo 2.46: Uso de assertSame()

<?php
class IdenticoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertSame('2204', 2204);
}
}
?>
phpunit IdenticoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) IdenticoTest::testFalha
Failed asserting that 2204 is identical to '2204'.

/home/sb/IdenticoTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertSame(objeto $esperado, objeto $real[, string $mensagem = ''])

Relata um erro identificado por $mensagem se as duas variáveis $esperado e $real não referenciarem ao mesmo objeto.

Exemplo 2.47: Uso de assertSame() with objects

<?php
class IdenticoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertSame(new stdClass, new stdClass);
}
}
?>
phpunit IdenticoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) IdenticoTest::testFalha
Failed asserting that two variables reference the same object.

/home/sb/IdenticoTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertSelectCount()

assertSelectCount(vetor $seletor, inteiro $conta, misto $real[, string $mensagem = '', booleano $ehHtml = TRUE])

Relata um erro identificado por $mensagem se o seletor CSS $seletor não combinar com $conta elementos no DOMNode $real.

$conta pode ser um dos seguintes tipos:

  • booleano: assegura para a presença de elementos que batam com seletor (TRUE) ou falta de elementos (FALSE).
  • integer: assegura a contagem de elementos.
  • array: assegura que a contagem está dentro do âmbito especificada ao usar <, >, <=, e >= como chaves.

Exemplo 2.48: Uso de assertSelectCount()

<?php
class SelecionaContaTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
$this->xml = new DomDocument;
$this->xml->loadXML('<foo><bar/><bar/><bar/></foo>');
}

public function testAusenciaFalha()
{
$this->assertSelectCount('foo bar', FALSE, $this->xml);
}

public function testPresencaFalha()
{
$this->assertSelectCount('foo baz', TRUE, $this->xml);
}

public function testContaExataFalha()
{
$this->assertSelectCount('foo bar', 5, $this->xml);
}

public function testAmbitoFalha()
{
$this->assertSelectCount('foo bar', array('>'=>6, '<'=>8), $this->xml);
}
}
?>
phpunit SelecionaContaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

FFFF

Time: 0 seconds, Memory: 5.50Mb

There were 4 failures:

1) SelecionaContaTest::testAusenciaFalha
Failed asserting that true is false.

/home/sb/SelecionaContaTest.php:12

2) SelecionaContaTest::testPresencaFalha
Failed asserting that false is true.

/home/sb/SelecionaContaTest.php:17

3) SelecionaContaTest::testContaExataFalha
Failed asserting that 3 matches expected 5.

/home/sb/SelecionaContaTest.php:22

4) SelecionaContaTest::testAmbitoFalha
Failed asserting that false is true.

/home/sb/SelecionaContaTest.php:27

FAILURES!
Tests: 4, Assertions: 4, Failures: 4.


assertSelectEquals()

assertSelectEquals(vetor $seletor, string $conteudo, inteiro $conta, misto $real[, string $mensagem = '', booleano $ehHtml = TRUE])

Relata um erro identificado por $mensagem se o seletor CSS $seletor não combinar com $conta elementos in the DOMNode $real com o valor $conteudo.

$conta pode ser de um dos seguintes tipos:

  • boolean: assegura para a presença de elementos que combinam com o seletor (TRUE) ou falta de elementos (FALSE).
  • integer: assegura a contagem de elementos.
  • array: assegura que a contagem está dentro do âmbito especificado ao usar <, >, <=, e >= como chaves.

Exemplo 2.49: Uso de assertSelectEquals()

<?php
class SelecionaIgualaTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
$this->xml = new DomDocument;
$this->xml->loadXML('<foo><bar>Baz</bar><bar>Baz</bar></foo>');
}

public function testAusenciaFalha()
{
$this->assertSelectEquals('foo bar', 'Baz', FALSE, $this->xml);
}

public function testPresencaFalha()
{
$this->assertSelectEquals('foo bar', 'Bat', TRUE, $this->xml);
}

public function testContaExataFalha()
{
$this->assertSelectEquals('foo bar', 'Baz', 5, $this->xml);
}

public function testAmbitoFalha()
{
$this->assertSelectEquals('foo bar', 'Baz', array('>'=>6, '<'=>8), $this->xml);
}
}
?>
phpunit SelecionaIgualaTest
PHPUnit 4.2.0 by Sebastian Bergmann.

FFFF

Time: 0 seconds, Memory: 5.50Mb

There were 4 failures:

1) SelecionaIgualaTest::testAusenciaFalha
Failed asserting that true is false.

/home/sb/SelecionaIgualaTest.php:12

2) SelecionaIgualaTest::testPresencaFalha
Failed asserting that false is true.

/home/sb/SelecionaIgualaTest.php:17

3) SelecionaIgualaTest::testContaExataFalha
Failed asserting that 2 matches expected 5.

/home/sb/SelecionaIgualaTest.php:22

4) SelecionaIgualaTest::testAmbitoFalha
Failed asserting that false is true.

/home/sb/SelecionaIgualaTest.php:27

FAILURES!
Tests: 4, Assertions: 4, Failures: 4.


assertSelectRegExp()

assertSelectRegExp(vetor $seletor, string $padrao, inteiro $conta, misto $real[, string $mensagem = '', booleano $ehHtml = TRUE])

Relata um erro identificado por $mensagem se o seletor CSS $seletor não combinar com $conta elementos no DOMNode $real com um valor que combine com $padrao.

$conta pode ser de um dos seguintes tipos:

  • boolean: assegura para a presença de elementos que combinem com o seletor (TRUE) ou falta de elementos (FALSE).
  • integer: assegura a contagem de elementos.
  • array: assegura que a contagem está dentro do âmbito especificada ao usar <, >, <=, e >= como chaves.

Exemplo 2.50: Uso de assertSelectRegExp()

<?php
class SelecionaExpressaoRegularTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
$this->xml = new DomDocument;
$this->xml->loadXML('<foo><bar>Baz</bar><bar>Baz</bar></foo>');
}

public function testAusenciaFalha()
{
$this->assertSelectRegExp('foo bar', '/Ba.*/', FALSE, $this->xml);
}

public function testPresencaFalha()
{
$this->assertSelectRegExp('foo bar', '/B[oe]z]/', TRUE, $this->xml);
}

public function testContaExataFalha()
{
$this->assertSelectRegExp('foo bar', '/Ba.*/', 5, $this->xml);
}

public function testAmbitoFalha()
{
$this->assertSelectRegExp('foo bar', '/Ba.*/', array('>'=>6, '<'=>8), $this->xml);
}
}
?>
phpunit SelecionaExpressaoRegularTest
PHPUnit 4.2.0 by Sebastian Bergmann.

FFFF

Time: 0 seconds, Memory: 5.50Mb

There were 4 failures:

1) SelecionaExpressaoRegularTest::testAusenciaFalha
Failed asserting that true is false.

/home/sb/SelecionaExpressaoRegularTest.php:12

2) SelecionaExpressaoRegularTest::testPresencaFalha
Failed asserting that false is true.

/home/sb/SelecionaExpressaoRegularTest.php:17

3) SelecionaExpressaoRegularTest::testContaExataFalha
Failed asserting that 2 matches expected 5.

/home/sb/SelecionaExpressaoRegularTest.php:22

4) SelecionaExpressaoRegularTest::testAmbitoFalha
Failed asserting that false is true.

/home/sb/SelecionaExpressaoRegularTest.php:27

FAILURES!
Tests: 4, Assertions: 4, Failures: 4.


assertStringEndsWith()

assertStringEndsWith(string $sufixo, string $string[, string $mensagem = ''])

Relata um erro identificado por $mensagem se a $string não terminar com $sufixo.

assertStringEndsNotWith() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.51: Uso de assertStringEndsWith()

<?php
class StringTerminaComTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertStringEndsWith('sufixo', 'foo');
}
}
?>
phpunit StringTerminaComTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 1 second, Memory: 5.00Mb

There was 1 failure:

1) StringTerminaComTest::testFalha
Failed asserting that 'foo' ends with "sufixo".

/home/sb/StringTerminaComTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertStringEqualsFile()

assertStringEqualsFile(string $arquivoEsperado, string $stringReal[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o arquivo especificado por $arquivoEsperado não tiver $stringReal como seu conteúdo.

assertStringNotEqualsFile() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.52: Uso de assertStringEqualsFile()

<?php
class StringIgualaArquivoTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertStringEqualsFile('/home/sb/esperado', 'real');
}
}
?>
phpunit StringIgualaArquivoTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) StringIgualaArquivoTest::testFalha
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'esperado
-'
+'real'

/home/sb/StringIgualaArquivoTest.php:6

FAILURES!
Tests: 1, Assertions: 2, Failures: 1.


assertStringStartsWith()

assertStringStartsWith(string $prefixo, string $string[, string $mensagem = ''])

Relata um erro identificado por $mensagem se a $string não começar com $prefixo.

assertStringStartsNotWith() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.53: Uso de assertStringStartsWith()

<?php
class StringComecaComTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertStringStartsWith('prefixo', 'foo');
}
}
?>
phpunit StringComecaComTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) StringComecaComTest::testFalha
Failed asserting that 'foo' starts with "prefixo".

/home/sb/StringComecaComTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertTag()

assertTag(vetor $equiparador, string $real[, string $mensagem = '', booleano $ehHtml = TRUE])

Relata um erro identificado por $mensagem se $real não combinar com $equiparador.

$equiparador é um vetor associativo que especifica o critério de combinação para a asserção:

  • id: O nó com o atributo id fornecido que deve combinar com o valor correspondente.
  • tag: O tipo de nó deve combinar com o valor correspondente.
  • attributes: O atributo do nó deve combinar com o valor correspondente no vetor associativo $atributos.
  • content: O conteúdo do texto deve combinar com o valor fornecido.
  • parent: O pai do nó deve combinar com o vetor associativo $pai.
  • child: Pelo menos um dos filhos imediatos do nó deve combinar com o critério descrito no vetor associativo $filho.
  • ancestor: Pelo menos um dos ancestrais do nó deve combinar com o critério descrito pelo vetor associativo $ancestral.
  • descendant: Pelo menos um dos ancestrais do nó deve combinar com o critério descrito pelo vetor associativo $descendente.
  • children: vetor associativo para contagem de filhos de um nó.
    • count: O número de filhos que combinam deve ser igual a este número.
    • less_than: O número de filhos que combinam deve ser menor que este número.
    • greater_than: O número de filhos que combinam deve ser maior que este número.
    • only: Outro vetor associativo que consiste de chaves a serem usadas para combinar em um filho, e apenas filhos que combinem serão contados.

assertNotTag() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.54: Uso de assertTag()

<?php
// Equiparador que assegura que há um elemento com uma id="minha_id".
$equiparador = array('id' => 'minha_id');

// Equiparador que assegura que há uma tag "span".
$equiparador = array('tag' => 'span');

// Equiparador que assegura que há uma tag "span" com o conteúdo
// "Olá Mundo".
$equiparador = array('tag' => 'span', 'content' => 'Hello World');

// Equiparador que assegura que há uma tag "span" com o conteúdo
// correspondendo ao padrão da expressão regular
$equiparador = array('tag' => 'span', 'content' => 'regexp:/Try P(HP|ython)/');

// Equiparador que assegura que há um "span" com um atributo de
// classe "list".
$equiparador = array(
'tag' => 'span',
'attributes' => array('class' => 'list')
);

// Equiparador que assegura que há um "span" dentro de uma "div".
$equiparador = array(
'tag' => 'span',
'parent' => array('tag' => 'div')
);

// Equiparador que assegura que há um "span" em algum lugar dentro
// de uma "table".
$equiparador = array(
'tag' => 'span',
'ancestor' => array('tag' => 'table')
);

// Equiparador que assegura que há um "span" com pelo menos um
// filho "em".
$equiparador = array(
'tag' => 'span',
'child' => array('tag' => 'em')
);

// Equiparador ue assegura que há um "span" contendo uma
// (possivelmente aninhada) tag "strong".
$equiparador = array(
'tag' => 'span',
'descendant' => array('tag' => 'strong')
);

// Equiparador que assegura que há um "span" contendo 5-10 tags
// "em" como filhos imediatos.
$equiparador = array(
'tag' => 'span',
'children' => array(
'less_than' => 11,
'greater_than' => 4,
'only' => array('tag' => 'em')
)
);

// Equiparador que assegura que há uma "div", com um ancestral "ul"
// e um pai "li" (com class="enum"), e contendo um descendente "span"
// que contém um elemento com id="meu_teste" e o texto "Olá Mundo".
$equiparador = array(
'tag' => 'div',
'ancestor' => array('tag' => 'ul'),
'parent' => array(
'tag' => 'li',
'attributes' => array('class' => 'enum')
),
'descendant' => array(
'tag' => 'span',
'child' => array(
'id' => 'my_test',
'content' => 'Hello World'
)
)
);

// Use assertTag() para aplicar um $equiparador a um pedaço do $html.
$this->assertTag($equiparador, $html);

// Use assertTag() para aplicar um $equiparador a um pedaço do $xml.
$this->assertTag($equiparador, $xml, '', FALSE);
?>


assertThat()

Asserções mais complexas podem ser formuladas usando a classe PHPUnit_Framework_Constraint. Elas podem ser avaliados usando o método assertThat(). Exemplo 2.55 mostra como as restrições logicalNot() e equalTo() podem ser usados para expressar a mesma asserção que assertNotEquals().

assertThat(misto $valor, PHPUnit_Framework_Constraint $restricao[, $mensagem = ''])

Relata um erro identificado por $mensagem se o $valor não combinar com $restricao.

Exemplo 2.55: Uso de assertThat()

<?php
class BiscoitoTest extends PHPUnit_Framework_TestCase
{
public function testEquals()
{
$oBiscoito = new Biscoito('Gengibre');
$meuBiscoito = new Biscoito('Gengibre');

$this->assertThat(
$oBiscoito,
$this->logicalNot(
$this->equalTo($meuBiscoito)
)
);
}
}
?>


Tabela 2.3 mostra as classes PHPUnit_Framework_Constraint disponíveis.

Tabela 2.3. Restrições

RestriçãoSignificado
PHPUnit_Framework_Constraint_Attribute attribute(PHPUnit_Framework_Constraint $restricao, $nomeAtributo)Restrição que aplica outro restritor a um atributo de uma classe ou objeto.
PHPUnit_Framework_Constraint_IsAnything anything()Restrição que aceita a inserção de qualquer valor.
PHPUnit_Framework_Constraint_ArrayHasKey arrayHasKey(misto $chave)Restrição que assegura que o vetor avaliado possui a chave fornecida.
PHPUnit_Framework_Constraint_TraversableContains contains(misto $valor)Restrição que assegura que o vetor ou objeto que implementa a interface Iterator é avaliado por conter apenas um valor fornecido.
PHPUnit_Framework_Constraint_TraversableContainsOnly containsOnly(string $tipo)Restrição que assegura que o vetor ou objeto que implementa a interface Iterator é avaliado por conter apenas os valores de um tipo fornecido.
PHPUnit_Framework_Constraint_TraversableContainsOnly containsOnlyInstancesOf(string $nomeclasse)Restrição que assegura que o array ou objeto que implementa a interface Iterator é avaliado por conter apenas instâncias de um nome de classe fornecido.
PHPUnit_Framework_Constraint_IsEqual equalTo($valor, $delta = 0, $profundidadeMaxima = 10)Restrição que verifica se um valor é igual a outro.
PHPUnit_Framework_Constraint_Attribute attributeEqualTo($nomeAtributo, $valor, $delta = 0, $profundidadeMaxima = 10)Restrição que verifica se um valor é igual a um atributo de uma classe ou de um objeto.
PHPUnit_Framework_Constraint_FileExists fileExists()Restrição que verifica se existe o arquivo(nome) que é avaliado.
PHPUnit_Framework_Constraint_GreaterThan greaterThan(misto $valor)Restrição que assegura que o valor avaliado é maior que um valor fornecido.
PHPUnit_Framework_Constraint_Or greaterThanOrEqual(misto $valor)Restrição que assegura que o valor avaliado é maior ou igual a um valor fornecido.
PHPUnit_Framework_Constraint_ClassHasAttribute classHasAttribute(string $nomeAtributo)Restrição que assegura que a classe que é avaliada possui um atributo fornecido.
PHPUnit_Framework_Constraint_ClassHasStaticAttribute classHasStaticAttribute(string $nomeAtributo)Restrição que assegura que a classe avaliada possui um atributo estático fornecido.
PHPUnit_Framework_Constraint_ObjectHasAttribute hasAttribute(string $nomeAtributo)Restrição que assegura que o objeto avaliado possui um atributo fornecido.
PHPUnit_Framework_Constraint_IsIdentical identicalTo(misto $valor)Restrição que assegura que um valor é idêntico a outro.
PHPUnit_Framework_Constraint_IsFalse isFalse()Restrição que assegura que o valor avaliado é FALSE.
PHPUnit_Framework_Constraint_IsInstanceOf isInstanceOf(string $nomeClasse)Restrição que assegura que o objeto avaliado é uma instância de uma classe fornecida.
PHPUnit_Framework_Constraint_IsNull isNull()Restrição que assegura que o valor avaliado é NULL.
PHPUnit_Framework_Constraint_IsTrue isTrue()Restrição que assegura que o valor avaliado é TRUE.
PHPUnit_Framework_Constraint_IsType isType(string $tipo)Restrição que assegura que o valor avaliado é de um tipo especificado.
PHPUnit_Framework_Constraint_LessThan lessThan(misto $valor)Restrição que assegura que o valor avaliado é menor que um valor fornecido.
PHPUnit_Framework_Constraint_Or lessThanOrEqual(misto $valor)Restrição que assegura que o valor avaliado é menor ou igual a um valor fornecido.
logicalAnd()AND lógico.
logicalNot(PHPUnit_Framework_Constraint $restricao)NOT lógico.
logicalOr()OR lógico.
logicalXor()XOR lógico.
PHPUnit_Framework_Constraint_PCREMatch matchesRegularExpression(string $padrao)Restrição que assegura que a string avaliada combina com uma expressão regular.
PHPUnit_Framework_Constraint_StringContains stringContains(string $string, booleano $case)Restrição que assegura que a string avaliada contém uma string fornecida.
PHPUnit_Framework_Constraint_StringEndsWith stringEndsWith(string $sufixo)Restrição que assegura que a string avaliada termina com um sufixo fornecido.
PHPUnit_Framework_Constraint_StringStartsWith stringStartsWith(string $prefixo)Restrição que assegura que a string avaliada começa com um prefixo fornecido.


assertTrue()

assertTrue(booleano $condicao[, string $mensagem = ''])

Relata um erro identificado por $mensagem se $condicao is FALSE.

assertNotTrue() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.56: Uso de assertTrue()

<?php
class VerdadeiroTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertTrue(FALSE);
}
}
?>
phpunit VerdadeiroTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) VerdadeiroTest::testFalha
Failed asserting that false is true.

/home/sb/VerdadeiroTest.php:6

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


assertXmlFileEqualsXmlFile()

assertXmlFileEqualsXmlFile(string $arquivoEsperado, string $arquivoReal[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o documento XML em $arquivoReal não for igual ao documento XML em $arquivoEsperado.

assertXmlFileNotEqualsXmlFile() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.57: Uso de assertXmlFileEqualsXmlFile()

<?php
class ArquivoXmlIgualaArquivoXmlTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertXmlFileEqualsXmlFile(
'/home/sb/esperado.xml', '/home/sb/real.xml');
}
}
?>
phpunit ArquivoXmlIgualaArquivoXmlTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) ArquivoXmlIgualaArquivoXmlTest::testFalha
Failed asserting that two DOM documents are equal.
--- Expected
+++ Actual
@@ @@
<?xml version="1.0"?>
<foo>
- <bar/>
+ <baz/>
</foo>

/home/sb/ArquivoXmlIgualaArquivoXmlTest.php:7

FAILURES!
Tests: 1, Assertions: 3, Failures: 1.


assertXmlStringEqualsXmlFile()

assertXmlStringEqualsXmlFile(string $arquivoEsperado, string $xmlReal[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o documento XML em $xmlReal não for igual ao documento XML em $arquivoEsperado.

assertXmlStringNotEqualsXmlFile() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.58: Uso de assertXmlStringEqualsXmlFile()

<?php
class StringXmlIgualaArquivoXmlTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertXmlStringEqualsXmlFile(
'/home/sb/esperado.xml', '<foo><baz/></foo>');
}
}
?>
phpunit StringXmlIgualaArquivoXmlTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) StringXmlIgualaArquivoXmlTest::testFalha
Failed asserting that two DOM documents are equal.
--- Expected
+++ Actual
@@ @@
<?xml version="1.0"?>
<foo>
- <bar/>
+ <baz/>
</foo>

/home/sb/StringXmlIgualaArquivoXmlTest.php:7

FAILURES!
Tests: 1, Assertions: 2, Failures: 1.


assertXmlStringEqualsXmlString()

assertXmlStringEqualsXmlString(string $xmlEsperado, string $xmlReal[, string $mensagem = ''])

Relata um erro identificado por $mensagem se o documento XML em $xmlReal não for igual ao documento XML em $xmlEsperado.

assertXmlStringNotEqualsXmlString() é o inverso desta asserção e recebe os mesmos argumentos.

Exemplo 2.59: Uso de assertXmlStringEqualsXmlString()

<?php
class StringXmlIgualaStringXmlTest extends PHPUnit_Framework_TestCase
{
public function testFalha()
{
$this->assertXmlStringEqualsXmlString(
'<foo><bar/></foo>', '<foo><baz/></foo>');
}
}
?>
phpunit StringXmlIgualaStringXmlTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) StringXmlIgualaStringXmlTest::testFalha
Failed asserting that two DOM documents are equal.
--- Expected
+++ Actual
@@ @@
<?xml version="1.0"?>
<foo>
- <bar/>
+ <baz/>
</foo>

/home/sb/StringXmlIgualaStringXmlTest.php:7

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


Saída de Erro

Sempre que um teste falha o PHPUnit faz o melhor para fornecer a você o máximo possível de conteúdo que possa ajudar a identificar o problema.

Exemplo 2.60: Saída de erro gerada quando uma comparação de vetores falha

<?php
class VetorDifereTest extends PHPUnit_Framework_TestCase
{
public function testIgualdade() {
$this->assertEquals(
array(1,2,3 ,4,5,6),
array(1,2,33,4,5,6)
);
}
}
?>
phpunit VetorDifereTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) VetorDifereTest::testIgualdade
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
Array (
0 => 1
1 => 2
- 2 => 3
+ 2 => 33
3 => 4
4 => 5
5 => 6
)

/home/sb/VetorDifereTest.php:7

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


Neste exemplo apenas um dos valores dos vetores diferem e os outros valores são exibidos para fornecer o contexto em que o erro ocorreu.

Quando a saída gerada for longa demais para ler o PHPUnit vai quebrá-la e fornecer algumas linhas de contexto ao redor de cada diferença.

Exemplo 2.61: Saída de erro quando uma comparação de um vetor longo falha

<?php
class VetorLongoDifereTest extends PHPUnit_Framework_TestCase
{
public function testIgualdade() {
$this->assertEquals(
array(0,0,0,0,0,0,0,0,0,0,0,0,1,2,3 ,4,5,6),
array(0,0,0,0,0,0,0,0,0,0,0,0,1,2,33,4,5,6)
);
}
}
?>
phpunit VetorLongoDifereTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) VetorLongoDifereTest::testIgualdade
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
13 => 2
- 14 => 3
+ 14 => 33
15 => 4
16 => 5
17 => 6
)


/home/sb/VetorLongoDifereTest.php:7

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


Casos Extremos

Quando uma comparação falha o PHPUnit cria uma representação textual da entrada de valores e as compara. Devido a essa implementação uma diferenciação pode mostrar mais problemas do que realmente existem.

Isso só acontece quando se usa assertEquals ou outra função 'fraca' de comparação em vetores ou objetos.

Exemplo 2.62: Caso extremo na geração de uma diferenciação quando se usa uma comparação fraca

<?php
class ComparacaoFracaVetorTest extends PHPUnit_Framework_TestCase
{
public function testIgualdade() {
$this->assertEquals(
array(1 ,2,3 ,4,5,6),
array('1',2,33,4,5,6)
);
}
}
?>
phpunit ComparacaoFracaVetorTest
PHPUnit 4.2.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

1) ComparacaoFracaVetorTest::testIgualdade
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
Array (
- 0 => 1
+ 0 => '1'
1 => 2
- 2 => 3
+ 2 => 33
3 => 4
4 => 5
5 => 6
)


/home/sb/ComparacaoFracaVetorTest.php:7

FAILURES!
Tests: 1, Assertions: 1, Failures: 1.


Neste exemplo a diferença no primeiro índice entre 1 e '1' é relatada ainda que o assertEquals considere os valores como uma combinação.