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:
Os testes para uma classe Classe
vão dentro de uma classe ClasseTest
.
ClasseTest
herda (na maioria das vezes) de PHPUnit_Framework_TestCase
.
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.
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
| ||
--Martin Fowler |
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.
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++; } } ?>
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.
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étodo | Significado |
---|---|
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.
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.
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
.
À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étodo | Significado |
---|---|
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. |
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.
Esta seção lista os vários métodos de asserção (assertion) disponíveis.
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(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(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(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(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(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($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(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(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(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(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(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(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(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(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($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($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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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); ?>
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ção | Significado |
---|---|
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(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(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(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(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.
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.
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.