Глава 4. Написание тестов на PHPUnit

  Пример 4.1, «Тестирование операций с массивами с использованием PHPUnit» показывает как можно писать тесты на PHPUnit для операций с массивами в PHP. Этот пример представляет базовые соглашения и шаги для написания тестов с помощью PHPUnit:

  1. Тесты для класса Class содержатся в классеClassTest.

  2. ClassTest унаследован (чаще всего) от PHPUnit_Framework_TestCase.

  3.   

    Тесты это публичные методы с именами test*.

      Кроме этого, можно использовать аннотацию @test в док-блоке чтобы пометить метод как тест.

  4. Внутри тестовых методов для проверки того что реальные данные соответствуют ожидаемым используются методы-утверждения (assertion methods) такие как assertEquals() (см.«Утверждения (Assertions)»)

 

Пример 4.1. Тестирование операций с массивами с использованием PHPUnit

<?php
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        $this->assertEquals(0, count($stack));

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

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

 

Всякий раз, когда вы испытываете искушение напечатать что-то внутри оператора print или отладочного выражения, напишите это как тест.

 
  --Мартин Фаулер

 Межтестовые зависимости

 

Модульные тесты главным образом в виде практики которая помогает разработчикам идентифицировать и исправить баги, реорганизовывать (refactor) код и служит в качестве документации для модуля тестируемой программы. Для того чтобы достичь этих преимуществ, модульные тесты, в идеале, должны охватывать все возможные пути исполнения программы. Один модульный тест обычно покрывает один конкретный путь в одной функции или методе. Однако тестовый метод это не обязательно инкапсулированная, независимая сущность. Часто существуют неявные зависимости между тестовыми методами, скрытые в сценарии реализации теста.

 
  --Adrian Kuhn et. al.

  PHPUnit поддерживает опсание явных зависимостей между тестовыми методами. Эти зависимости не определяют порядок в котором тесты будут выполняться, но они позволяют передавать тестовые данные (фикстуры), созданные поставщиком, (producer) потребителям (consumers), котрые от него зависят.

  • Поставщик - это тестовый метод, который предоставляет свой тестируемый модуль в качестве возвращаемого значения.

  • Потребитель - это тестовый метод, который зависит от одного или более поставщиков и их возвращаемых значений.

    Пример 4.2, «Использвание аннотации @depends для описания зависимостей » показывает как использовать аннотацию @depends для описания зависимостей между тестовыми методами.

 

Пример 4.2. Использвание аннотации @depends для описания зависимостей

<?php
class StackTest extends PHPUnit_Framework_TestCase
{
    public function testEmpty()
    {
        $stack = array();
        $this->assertEmpty($stack);

        return $stack;
    }

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

        return $stack;
    }

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

В приведённом выше примере первый тест,testEmpty(), создаёт новый массив и утверждает что массив пустой. Затем тест возвращает фикстуру в виде результата. Второй тест,testPush(), зависит от testEmpty() и получает результат от теста-зависисмости в качестве аргумента. Наконец, testPop() зависит отtestPush().

  Для того чтобы находить дефекты быстро, нам нужно сконцентрировать внимание на соответствующих тестах. Для этого PHPUnit пропускает исполн ение тестов, когда зависимость провалилась. Это улучшает локализацию дефектов за счёт использования зависимостей между тестами как показано в Пример 4.3, «Использование зависимостей между тестами».

 

Пример 4.3. Использование зависимостей между тестами

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

    /**
     * @depends testOne
     */
    public function testTwo()
    {
    }
}
?>
phpunit --verbose DependencyFailureTest
        
PHPUnit 3.7.0 by Sebastian Bergmann.

FS

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) DependencyFailureTest::testOne
Failed asserting that false is true.

/home/sb/DependencyFailureTest.php:6

There was 1 skipped test:

1) DependencyFailureTest::testTwo
This test depends on "DependencyFailureTest::testOne" to pass.


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

У теста может быть несколько аннотаций@depends. PHPUnit не изменяет порядок в котром будут выполняться тесты, поэтому вы должны убедиться что все зависимости теста удовлетворены до его выполнения.

 Провайдеры данных

    Тестовый метод может принимать произвольные аргументы. Эти аргументы должны быть предоставлены методом - провайдером данных (provider() в Пример 4.4, «Использование провайдера данных, который возвращает массив массивов »). Метод, который будет использован в качестве провайдера данных, обозначается с помощью аннотации@dataProvider.

Метод провайдера данных должен быть public и возвращать либо массив массивов либо объект реализующий интерфейс Iterator, который возвращает массив при каждой итера ции. Для каждого массива являющегося частью коллекции будет вызван тестовый метод с элементами массива в качестве параметров

 

Пример 4.4. Использование провайдера данных, который возвращает массив массивов

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

    public function provider()
    {
        return array(
          array(0, 0, 0),
          array(0, 1, 1),
          array(1, 0, 1),
          array(1, 1, 3)
        );
    }
}
?>
phpunit DataTest
PHPUnit 3.7.0 by Sebastian Bergmann.

...F

Time: 0 seconds, Memory: 5.75Mb

There was 1 failure:

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

/home/sb/DataTest.php:9

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

 

Пример 4.5. Использование провайдера данных, который возвращает объект-итератор

<?php
require 'CsvFileIterator.php';

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

    public function provider()
    {
        return new CsvFileIterator('data.csv');
    }
}
?>
phpunit DataTest
PHPUnit 3.7.0 by Sebastian Bergmann.

...F

Time: 0 seconds, Memory: 5.75Mb

There was 1 failure:

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

/home/sb/DataTest.php:11

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

 

Пример 4.6. Класс CsvFileIterator

<?php
class CsvFileIterator implements Iterator {
    protected $file;
    protected $key = 0;
    protected $current;

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

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

    public function rewind() {
        rewind($this->file);
        $this->current = fgetcsv($this->file);
        $this->key = 0;
    }

    public function valid() {
        return !feof($this->file);
    }

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

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

    public function next() {
        $this->current = fgetcsv($this->file);
        $this->key++;
    }
}
?>

Примечание

      Если тест получает данные как от @dataProvider так и от теста (или тестов) от которых он зависит (@depends), аргументы от провайдера будут переданы в тест первыми, а аргументы от @depends добавлены в конец списка аргументов.

Примечание

      Если один тест зависит от другого теста, который использует провайдер, тест-потребитель выполнится если тест-поставщик упешно пройдёт хотя бы для одного набора параметров из провайдера. Результат выполнения теста-поставщика, который использует провайдера, не может быть передан тесту-потребителю.

Примечание

      Все функции-провайдеры выполняются до того как впервые будет вызван метод setUp. Поэтому, вы не сможете получить доступ к переменным которые вы определили в нём изнутри провайдера.

 Тестирование исключений

    Пример 4.7, «Использование аннотации @expectedException» показывает как c помощью аннотации @expectedException проверить было ли вызвано исключение в тестируемом коде.

 

Пример 4.7. Использование аннотации @expectedException

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

        F

        Time: 0 seconds, Memory: 4.75Mb

        There was 1 failure:

        1) ExceptionTest::testException
        Expected exception InvalidArgumentException


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

        Дополнительно вы можете использовать @expectedExceptionMessage и @expectedExceptionCode в сочетании с @expectedException для проверки сообщений и кодов исключений как показано в Пример 4.8, « Использование аннотаций @expectedExceptionMessage и @expectedExceptionCode ».

 

Пример 4.8. Использование аннотаций @expectedExceptionMessage и @expectedExceptionCode

<?php
class ExceptionTest extends PHPUnit_Framework_TestCase
{
    /**
     * @expectedException        InvalidArgumentException
     * @expectedExceptionMessage Right Message
     */
    public function testExceptionHasRightMessage()
    {
        throw new InvalidArgumentException('Some Message', 10);
    }

    /**
     * @expectedException     InvalidArgumentException
     * @expectedExceptionCode 20
     */
    public function testExceptionHasRightCode()
    {
        throw new InvalidArgumentException('Some Message', 10);
    }
}
?>
phpunit ExceptionTest
PHPUnit 3.7.0 by Sebastian Bergmann.

FF

Time: 0 seconds, Memory: 3.00Mb

There were 2 failures:

1) ExceptionTest::testExceptionHasRightMessage
Failed asserting that exception message 'Some Message' contains 'Right Message'.


2) ExceptionTest::testExceptionHasRightCode
Failed asserting that expected exception code 20 is equal to 10.


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

«@expectedExceptionMessage» и «@expectedExceptionCode» приводят другие примеры использования @expectedExceptionMessage и @expectedExceptionCode соответственно.

В качестве альтернативы, можно использовать метод setExpectedException(), чтобы задать ожидаемое исключение Пример 4.9, «Ожидаем исключение которое будет вызвано тестовым кодом».

 

Пример 4.9. Ожидаем исключение которое будет вызвано тестовым кодом

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

    public function testExceptionHasRightMessage()
    {
        $this->setExpectedException(
          'InvalidArgumentException', 'Right Message'
        );
        throw new InvalidArgumentException('Some Message', 10);
    }

    public function testExceptionHasRightCode()
    {
        $this->setExpectedException(
          'InvalidArgumentException', 'Right Message', 20
        );
        throw new InvalidArgumentException('The Right Message', 10);
    }
}?>
phpunit ExceptionTest
PHPUnit 3.7.0 by Sebastian Bergmann.

FFF

Time: 0 seconds, Memory: 3.00Mb

There were 3 failures:

1) ExceptionTest::testException
Expected exception InvalidArgumentException


2) ExceptionTest::testExceptionHasRightMessage
Failed asserting that exception message 'Some Message' contains 'Right Message'.


3) ExceptionTest::testExceptionHasRightCode
Failed asserting that expected exception code 20 is equal to 10.


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

Таблица 4.1, «Методы тестирования исключений» представляет методы для проверки исключений

 

Таблица 4.1. Методы тестирования исключений

МетодНазначение
void setExpectedException(string $exceptionName[, string $exceptionMessage = '', integer $exceptionCode = NULL]) Устанавливает тип ($exceptionName) ,сообщение ($exceptionMessage), и код ($exceptionCode.) ожидаемого исключения.
String getExpectedException() Возвращает тип ожидаемого исключения.

Также для тестирования исключения вы можете использовать подход который иллюстрирует пример Пример 4.10, «Альтернативный подход к тестированию исключений»

 

Пример 4.10. Альтернативный подход к тестированию исключений

<?php
class ExceptionTest extends PHPUnit_Framework_TestCase {
    public function testException() {
        try {
            // ... Код, который вызывает исключение ...
        }

        catch (InvalidArgumentException $expected) {
            return;
        }

        $this->fail('Ожидаемое исключение не было вызвано.');
    }
}
?>

Пример 4.10, «Альтернативный подход к тестированию исключений» демонстрирует, что если код от которого мы ожидали вызов исключения не вызовет его, последующий вызов метода fail() прервёт тест и сообщит о проблеме в тесте. Если ожидаемое исключение было вызвано, блок catch будет выполнен и тест завершится успешно.

 Тестирование ошибок PHP

          По умолчанию, PHPUnit преобразует ошибки, предупреждения и замечания (PHP Error, PHP Warning, PHP Notice соответственно), которые возникают во время выполнения теста в исключения. Используя эти исключения вы можете, например, что тест вызовет ошибку PHP, как это показывает Пример 4.11, «Ожидание ошибки PHP с использованием @expectedException».

 

Пример 4.11. Ожидание ошибки PHP с использованием @expectedException

<?php
class ExpectedErrorTest extends PHPUnit_Framework_TestCase
{
    /**
     * @expectedException PHPUnit_Framework_Error
     */
    public function testFailingInclude()
    {
        include 'not_existing_file.php';
    }
}
?>
        phpunit ExpectedErrorTest
        PHPUnit 3.7.0 by Sebastian Bergmann.

        .

        Time: 0 seconds, Memory: 5.25Mb

        OK (1 test, 1 assertion)
      

    PHPUnit_Framework_Error_Notice и PHPUnit_Framework_Error_Warning представляют замечания и предупреждения PHP соответственно.

Примечание

Вы должны быть как можно более конкретны когда теститруете исключения. Проверка слишком общих классов может приветси к нежелательным побочным эффектам. Поэтому проверка на встроенный класс Exception при помощи @expectedException или setExpectedException() больше не разрешена.

Когда вы тестируете код, основаный на функциях, которые вызывают ошибки, например fopen иногда может оказаться полезным подавление ошибок во время тестирования. Это позволит вам проверять возвращаемые значения подавляя замечания, которые иначе привели бы phpunit к PHPUnit_Framework_Error_Notice.

 

Пример 4.12. Testing return values of code that uses PHP Errors

<?php
class ErrorSuppressionTest extends PHPUnit_Framework_TestCase
{
    public function testFileWriting() {
        $writer = new FileWriter;
        $this->assertFalse(@$writer->write('/is-not-writeable/file', 'stuff'));
    }
}
class FileWriter
{
    public function write($file, $content) {
        $file = fopen($file, 'w');
        if($file == false) {
            return false;
        }
        // ...
    }
}

?>
phpunit ErrorSuppressionTest
          PHPUnit 3.7.0 by Sebastian Bergmann.

          .

          Time: 1 seconds, Memory: 5.25Mb

          OK (1 test, 1 assertion)


Без подавления ошибок мы бы получили fopen(/is-not-writeable/file): failed to open stream: No such file or directory.

 Тестирование вывода

Иногда вам нужно проверить что выполнение метода, например, даёт нам ожидаемый вывод (через echo или print) Класс PHPUnit_Framework_TestCase использует Буферизацию Вывода для того чтобы предоставить такую возможность.

Пример 4.13, «Тестирование вывода функции или метода» демонстрирует как использовать метод expectOutputString() для того чтобы задать ожидаемый вывод. Если это вывод не будет сгенерирован тест отмечен как проваленый.

 

Пример 4.13. Тестирование вывода функции или метода

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

    public function testExpectBarActualBaz()
    {
        $this->expectOutputString('bar');
        print 'baz';
    }
}
?>
phpunit OutputTest
        PHPUnit 3.7.0 by Sebastian Bergmann.

        .F

        Time: 0 seconds, Memory: 5.75Mb

        There was 1 failure:

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


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

Таблица 4.2, «Методы для тестирования вывода» представлены в таблице

 

Таблица 4.2. Методы для тестирования вывода

МетодНазначение
void expectOutputRegex(string $regularExpression) Задаёт регулярное выражение $regularExpression которому должен соответствовать вывод
void expectOutputString(string $expectedString) Устанавливает ожидаемое значение $expectedString которому должен быть равен вывод.
bool setOutputCallback(callable $callback) Устанавливает callback-функцию которая может быть использована, например, для нормализации вывода

Примечание

Обратите внимание, что PHPUnit проглатывает весь вывод который генерируется во время выполнения теста. В строгом режиме (strict mode) тест, кторый генерирует вывод провалится

 Утверждения (Assertions)

Эта секция перечисляет различные доступные методы-утверждения

 assertArrayHasKey()

  

assertArrayHasKey(mixed $key, array $array[, string $message = ''])

Сообщает об ошибке $message если $array не содержит ключа $key.

assertArrayNotHasKey() утверждает обратное и принимает тот же набор аргументов

 

Пример 4.14. Использование assertArrayHasKey()

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

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

          1) ArrayHasKeyTest::testFailure
          Failed asserting that an array has the key 'foo'.

          /home/sb/ArrayHasKeyTest.php:6

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

 assertClassHasAttribute()

  

assertClassHasAttribute(string $attributeName, string $className[, string $message = ''])

Сообщает об ошибке $message если $className::attributeName не существует.

assertClassNotHasAttribute() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.15. Использование assertClassHasAttribute()

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

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ClassHasAttributeTest::testFailure
Failed asserting that class "stdClass" has attribute "foo".

/home/sb/ClassHasAttributeTest.php:6

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

 assertClassHasStaticAttribute()

  

assertClassHasStaticAttribute(string $attributeName, string $className[, string $message = ''])

Сообщает об ошибке $message если статический аттрибут $className::attributeName не существет.

assertClassNotHasStaticAttribute() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.16. Использование assertClassHasStaticAttribute()

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

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ClassHasStaticAttributeTest::testFailure
Failed asserting that class "stdClass" has static attribute "foo".

/home/sb/ClassHasStaticAttributeTest.php:6

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

 assertContains()

    

assertContains(mixed $needle, Iterator|array $haystack[, string $message = ''])

Сообщает об ошибке $message если $needle не является элементом $haystack.

assertNotContains() утверждает обратное и принимает тот же набор аргументов.

assertAttributeContains() и assertAttributeNotContains() это удобные обёртки, которые используют публичные, защищенные, или приватные аттрибуты класса или объекта в качестве области поиска.

 

Пример 4.17. Использование assertContains()

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

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

          1) ContainsTest::testFailure
          Failed asserting that an array contains 4.

          /home/sb/ContainsTest.php:6

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

assertContains(string $needle, string $haystack[, string $message = ''])

Сообщает об ошибке $message если $needle не является подстрокой $haystack.

 

Пример 4.18. Использование assertContains()

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

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) ContainsTest::testFailure
Failed asserting that 'foobar' contains "baz".

/home/sb/ContainsTest.php:6

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

 assertContainsOnly()

    

assertContainsOnly(string $type, Iterator|array $haystack[, boolean $isNativeType = NULL, string $message = ''])

Сообщает об ошибке $message если $haystack содержит элементы отличные по типу от $type.

$isNativeType флаг который определяет является ли $type встроенным типом PHP или нет.

assertNotContainsOnly() утверждает обратное и принимает тот же набор аргументов.

assertAttributeContainsOnly() и assertAttributeNotContainsOnly() это удобные обёртки, которые используют публичные, защищенные, или приватные аттрибуты класса или объекта в качестве области поиска.

 

Пример 4.19. Использование assertContainsOnly()

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

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

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

/home/sb/ContainsOnlyTest.php:6

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

 assertContainsOnlyInstancesOf()

 

assertContainsOnlyInstancesOf(string $classname, Traversable|array $haystack[, string $message = ''])

Сообщает об ошибке $message если $haystack содержит что-то кроме экземпляров класса $classname.

 

Пример 4.20. Использование assertContainsOnlyInstancesOf()

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

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

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

/home/sb/ContainsOnlyInstancesOfTest.php:6

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

 assertCount()

  

assertCount($expectedCount, $haystack[, string $message = ''])

Сообщает об ошибке $message если количество элементов в $haystack не равно $expectedCount.

assertNotCount() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.21. Использование assertCount()

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

          F

          Time: 0 seconds, Memory: 4.75Mb

          There was 1 failure:

          1) CountTest::testFailure
          Failed asserting that actual size 1 matches expected size 0.

          /home/sb/CountTest.php:6

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

 assertEmpty()

    

assertEmpty(mixed $actual[, string $message = ''])

Сообщает об ошибке $message если $actual не пустое.

assertNotEmpty() утверждает обратное и принимает тот же набор аргументов.

assertAttributeEmpty() и assertAttributeNotEmpty() это удобные обёртки, которые используют публичные, защищенные, или приватные аттрибуты класса или объекта в качестве области поиска.

 

Пример 4.22. Использование assertEmpty()

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

          F

          Time: 0 seconds, Memory: 4.75Mb

          There was 1 failure:

          1) EmptyTest::testFailure
          Failed asserting that an array is empty.

          /home/sb/EmptyTest.php:6

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

 assertEqualXMLStructure()

 

assertEqualXMLStructure(DOMElement $expectedElement, DOMElement $actualElement[, boolean $checkAttributes = FALSE, string $message = ''])

Сообщает об ошибке $message если структура XML элемента DOM в $actualElement не совпадает с структурой XML элемента DOM в$expectedElement.

 

Пример 4.23. Использование assertEqualXMLStructure()

<?php
class EqualXMLStructureTest extends PHPUnit_Framework_TestCase
{
    public function testFailureWithDifferentNodeNames()
    {
        $expected = new DOMElement('foo');
        $actual = new DOMElement('bar');

        $this->assertEqualXMLStructure($expected, $actual);
    }

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

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

        $this->assertEqualXMLStructure(
          $expected->firstChild, $actual->firstChild, TRUE
        );
    }

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

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

        $this->assertEqualXMLStructure(
          $expected->firstChild, $actual->firstChild
        );
    }

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

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

        $this->assertEqualXMLStructure(
          $expected->firstChild, $actual->firstChild
        );
    }
}
?>
phpunit EqualXMLStructureTest
PHPUnit 3.7.0 by Sebastian Bergmann.

FFFF

Time: 0 seconds, Memory: 5.75Mb

There were 4 failures:

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

/home/sb/EqualXMLStructureTest.php:9

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

/home/sb/EqualXMLStructureTest.php:22

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

/home/sb/EqualXMLStructureTest.php:35

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

/home/sb/EqualXMLStructureTest.php:48

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

 assertEquals()

    

assertEquals(mixed $expected, mixed $actual[, string $message = ''])

Сообщает об ошибке $message если переменные $expected и $actual не равны между собой.

assertNotEquals() утверждает обратное и принимает тот же набор аргументов.

assertAttributeEquals() и assertAttributeNotEquals() это удобные обёртки, которые используют публичные, защищенные, или приватные аттрибуты класса или объекта в качестве области поиска.

 

Пример 4.24. Использование assertEquals()

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

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

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

          FFF

          Time: 0 seconds, Memory: 5.25Mb

          There were 3 failures:

          1) EqualsTest::testFailure
          Failed asserting that 0 matches expected 1.

          /home/sb/EqualsTest.php:6

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

          /home/sb/EqualsTest.php:11

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

          /home/sb/EqualsTest.php:16

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

Более специфические сравнения, которые используются для определённых типов аргументов $expected и $actual смотрите ниже.

assertEquals(float $expected, float $actual[, string $message = '', float $delta = 0])

Сообщает об ошибке $message если два числ а с плавающей запятой $expected и $actual отличаются более чем на $delta друг от друга.

Смотрите " Что нужно знать про арифметику с плавающей запятой " чтобы понять зачем нужна $delta

 

Пример 4.25. Использование assertEquals() с числами с плавающей запятой floats

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

    public function testFailure()
    {
        $this->assertEquals(1.0, 1.1);
    }
}
?>
phpunit EqualsTest
          PHPUnit 3.7.0 by Sebastian Bergmann.

          .F

          Time: 0 seconds, Memory: 5.75Mb

          There was 1 failure:

          1) EqualsTest::testFailure
          Failed asserting that 1.1 matches expected 1.0.

          /home/sb/EqualsTest.php:11

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

assertEquals(DOMDocument $expected, DOMDocument $actual[, string $message = ''])

Сообщает об ошибке $message если некомментированная каноническая форма XML документов представленых двумя объектами DOMDocument $expected и $actual не совпадает.

 

Пример 4.26. Использование assertEquals() с объектами DOMDocument

<?php
class EqualsTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $expected = new DOMDocument;
        $expected->loadXML('<foo><bar/></foo>');

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

        $this->assertEquals($expected, $actual);
    }
}
?>
phpunit EqualsTest
PHPUnit 3.7.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

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

/home/sb/EqualsTest.php:12

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

assertEquals(object $expected, object $actual[, string $message = ''])

Сообщает об ошибке $message если два объекта $expected и $actual имеют неодинаковые аттрибуты.

 

Пример 4.27. Использование assertEquals() с объектами

<?php
class EqualsTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $expected = new stdClass;
        $expected->foo = 'foo';
        $expected->bar = 'bar';

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

        $this->assertEquals($expected, $actual);
    }
}
?>
phpunit EqualsTest
PHPUnit 3.7.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

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

/home/sb/EqualsTest.php:14

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

assertEquals(array $expected, array $actual[, string $message = ''])

Сообщает об ошибке $message если два массива $expected и $actual не равны.

 

Пример 4.28. Использование assertEquals() с массивами

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

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

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

/home/sb/EqualsTest.php:6

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

 assertFalse()

 

assertFalse(bool $condition[, string $message = ''])

Сообщает об ошибке $message если $condition равно TRUE.

 

Пример 4.29. Использование assertFalse()

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

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

          1) FalseTest::testFailure
          Failed asserting that true is false.

          /home/sb/FalseTest.php:6

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

 assertFileEquals()

  

assertFileEquals(string $expected, string $actual[, string $message = ''])

Сообщает об ошибке $message если файл $expected не равен по содержимому файлу $actual.

assertFileNotEquals() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.30. Использование assertFileEquals()

<?php
class FileEqualsTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertFileEquals('/home/sb/expected', '/home/sb/actual');
    }
}
?>
phpunit FileEqualsTest
          PHPUnit 3.7.0 by Sebastian Bergmann.

          F

          Time: 0 seconds, Memory: 5.25Mb

          There was 1 failure:

          1) FileEqualsTest::testFailure
          Failed asserting that two strings are equal.
          --- Expected
          +++ Actual
          @@ @@
          -'expected
          +'actual
          '

          /home/sb/FileEqualsTest.php:6

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

 assertFileExists()

  

assertFileExists(string $filename[, string $message = ''])

Сообщает об ошибке $message если файл $filename не существует.

assertFileNotExists() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.31. Использование assertFileExists()

<?php
class FileExistsTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertFileExists('/path/to/file');
    }
}
?>
phpunit FileExistsTest
PHPUnit 3.7.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) FileExistsTest::testFailure
Failed asserting that file "/path/to/file" exists.

/home/sb/FileExistsTest.php:6

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

 assertGreaterThan()

  

assertGreaterThan(mixed $expected, mixed $actual[, string $message = ''])

Сообщает об ошибке $message если значение $actual не больше чем $expected.

assertAttributeGreaterThan() это удобные обёртки, которые используют публичные, защищенные, или приватные аттрибуты класса или объекта в качестве актуального значения.

 

Пример 4.32. Использование assertGreaterThan()

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

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

          1) GreaterThanTest::testFailure
          Failed asserting that 1 is greater than 2.

          /home/sb/GreaterThanTest.php:6

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

 assertGreaterThanOrEqual()

  

assertGreaterThanOrEqual(mixed $expected, mixed $actual[, string $message = ''])

Сообщает об ошибке $message если значение $actual меньше значения $expected.

assertAttributeGreaterThanOrEqual() это удобные обёртки, которые используют публичные, защищенные, или приватные аттрибуты класса или объекта в качестве актуального значения.

 

Пример 4.33. Использование assertGreaterThanOrEqual()

<?php
class GreatThanOrEqualTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertGreaterThanOrEqual(2, 1);
    }
}
?>
phpunit GreaterThanOrEqualTest
          PHPUnit 3.7.0 by Sebastian Bergmann.

          F

          Time: 0 seconds, Memory: 5.25Mb

          There was 1 failure:

          1) GreatThanOrEqualTest::testFailure
          Failed asserting that 1 is equal to 2 or is greater than 2.

          /home/sb/GreaterThanOrEqualTest.php:6

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

 assertInstanceOf()

    

assertInstanceOf($expected, $actual[, $message = ''])

Сообщает об ошибке $message если $actual не является экземпляром $expected.

assertNotInstanceOf() утверждает обратное и принимает тот же набор аргументов.

assertAttributeInstanceOf() и assertAttributeNotInstanceOf() это удобные обёртки, которые можно использовать с публичными, защищенными, или приватными аттрибутом класса или объекта.

 

Пример 4.34. Использование assertInstanceOf()

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

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

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

/home/sb/InstanceOfTest.php:6

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

 assertInternalType()

    

assertInternalType($expected, $actual[, $message = ''])

Сообщает об ошибке $message если $actual не является переменной типа $expected.

assertNotInternalType() утверждает обратное и принимает тот же набор аргументов.

assertAttributeInternalType() и assertAttributeNotInternalType() это удобные обёртки, которые можно использовать с публичным, защищенным, или приватным аттрибутом класса или объекта.

 

Пример 4.35. Использование assertInternalType()

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

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) InternalTypeTest::testFailure
Failed asserting that 42 is of type "string".

/home/sb/InternalTypeTest.php:6

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

 assertJsonFileEqualsJsonFile()

  

assertJsonFileEqualsJsonFile(mixed $expectedFile, mixed $actualFile[, string $message = ''])

Сообщает об ошибке $message если значение $actualFile совпадает с $expectedFile.

 

Пример 4.36. Использование assertJsonFileEqualsJsonFile()

<?php
class JsonFileEqualsJsonFileTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertJsonFileEqualsJsonFile(
          'path/to/fixture/file', 'path/to/actual/file');
    }
}
?>
phpunit JsonFileEqualsJsonFileTest
          PHPUnit 3.7.0 by Sebastian Bergmann.

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

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

          /home/sb/JsonFileEqualsJsonFileTest.php:5

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

 assertJsonStringEqualsJsonFile()

  

assertJsonStringEqualsJsonFile(mixed $expectedFile, mixed $actualJson[, string $message = ''])

Сообщает об ошибке $message если строка $actualJson не совпадает с содержимым $expectedFile.

 

Пример 4.37. Использование assertJsonStringEqualsJsonFile()

<?php
class JsonStringEqualsJsonFileTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertJsonStringEqualsJsonFile(
          'path/to/fixture/file', json_encode(array("Mascott" => "ux"));
    }
}
?>
phpunit JsonStringEqualsJsonFileTest
          PHPUnit 3.7.0 by Sebastian Bergmann.

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

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

          /home/sb/JsonStringEqualsJsonFileTest.php:5

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

 assertJsonStringEqualsJsonString()

  

assertJsonStringEqualsJsonString(mixed $expectedJson, mixed $actualJson[, string $message = ''])

Сообщает об ошибке $message если десериализованая строка $actualJson не равна десериализованой строке $expectedJson.

 

Пример 4.38. Использование assertJsonStringEqualsJsonString()

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

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

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

          /home/sb/JsonStringEqualsJsonStringTest.php:5

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

 assertLessThan()

  

assertLessThan(mixed $expected, mixed $actual[, string $message = ''])

Сообщает об ошибке $message если значение $actual больше или равно значению $expected.

assertAttributeLessThan() удобная обёртка, которая позволяет применять assertLessThan к public, protected, или private аттрибута класса или объекта.

 

Пример 4.39. Использование assertLessThan()

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

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

          1) LessThanTest::testFailure
          Failed asserting that 2 is less than 1.

          /home/sb/LessThanTest.php:6

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

 assertLessThanOrEqual()

  

assertLessThanOrEqual(mixed $expected, mixed $actual[, string $message = ''])

Сообщает об ошибке $message если значение $actual строго больше чем $expected.

assertAttributeLessThanOrEqual() удобная обёртка, которая позволяет применять assertLessThanOrEqual к public, protected, или private аттрибута класса или объекта.

 

Пример 4.40. Использование assertLessThanOrEqual()

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

          F

          Time: 0 seconds, Memory: 5.25Mb

          There was 1 failure:

          1) LessThanOrEqualTest::testFailure
          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(mixed $variable[, string $message = ''])

Сообщает об ошибке $message если $variable не NULL.

assertNotNull() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.41. Использование assertNull()

<?php
class NullTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertNull('foo');
    }
}
?>
phpunit NotNullTest
          PHPUnit 3.7.0 by Sebastian Bergmann.

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

          1) NullTest::testFailure
          Failed asserting that 'foo' is null.

          /home/sb/NotNullTest.php:6

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

 assertObjectHasAttribute()

  

assertObjectHasAttribute(string $attributeName, object $object[, string $message = ''])

Сообщает об ошибке $message если $object->attributeName не существует.

assertObjectNotHasAttribute() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.42. Использование assertObjectHasAttribute()

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

F

Time: 0 seconds, Memory: 4.75Mb

There was 1 failure:

1) ObjectHasAttributeTest::testFailure
Failed asserting that object of class "stdClass" has attribute "foo".

/home/sb/ObjectHasAttributeTest.php:6

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

 assertRegExp()

  

assertRegExp(string $pattern, string $string[, string $message = ''])

Сообщает об ошибке $message если строка $string не соответствует регулярному выражению $pattern.

assertNotRegExp() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.43. Использование assertRegExp()

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

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) RegExpTest::testFailure
Failed asserting that 'bar' matches PCRE pattern "/foo/".

/home/sb/RegExpTest.php:6

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

 assertStringMatchesFormat()

  

assertStringMatchesFormat(string $format, string $string[, string $message = ''])

Сообщает об ошибке $message если строка $string не соответствует формату $format

assertStringNotMatchesFormat() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.44. Использование assertStringMatchesFormat()

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

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

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

/home/sb/StringMatchesFormatTest.php:6

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

Строка формата может содержать следующие шаблоны:

  • %e: Обозначает разделитель папок, например / для Linux.

  • %s: Один или более любых символов (включая пробелы) кроме символа конца строки.

  • %S: Любое количество (ноль или больше) любых символов (включая пробелы) кроме символа конца строки.

  • %a: Один или более любых символов включая пробелы и символ конца строки.

  • %A: Любое количество (ноль или больше) любых символов, включая пробелы и символ конца строки.

  • %w: Любое количество (ноль или больше) пробельных символов.

  • %i: Целое число со знаком, например+3142, -3142.

  • %d: Целое число без знака, например123456.

  • %x: Один или более One or more шестнадцатиричных символов. Т.е. символов 0-9, a-f, A-F.

  • %f: Число с плавающей запятой, например: 3.142, -3.142, 3.142E-10, 3.142e+10.

  • %c: Один любой символ.

 assertStringMatchesFormatFile()

  

assertStringMatchesFormatFile(string $formatFile, string $string[, string $message = ''])

Сообщает об ошибке $message если строка $string не удовлетворяет формату из $formatFile.

assertStringNotMatchesFormatFile() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.45. Использование assertStringMatchesFormatFile()

<?php
class StringMatchesFormatFileTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertStringMatchesFormatFile('/path/to/expected.txt', 'foo');
    }
}
?>
phpunit StringMatchesFormatFileTest
PHPUnit 3.7.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

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

/home/sb/StringMatchesFormatFileTest.php:6

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

 assertSame()

    

assertSame(mixed $expected, mixed $actual[, string $message = ''])

Сообщает об ошибке $message если две переменных $expected и $actual не совпадают одновременно по типу и значению.

assertNotSame() утверждает обратное и принимает тот же набор аргументов.

assertAttributeSame() и assertAttributeNotSame() удобные обёртки для сравнения public, protected, or private аттрибутов классов или объектов.

 

Пример 4.46. Использование assertSame()

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

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

          1) SameTest::testFailure
          Failed asserting that 2204 is identical to '2204'.

          /home/sb/SameTest.php:6

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

assertSame(object $expected, object $actual[, string $message = ''])

Сообщает об ошибке $message если две переменные $expected и $actual не ссылаются на один и тот же объект.

 

Пример 4.47. Использование assertSame() with objects

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

          F

          Time: 0 seconds, Memory: 4.75Mb

          There was 1 failure:

          1) SameTest::testFailure
          Failed asserting that two variables reference the same object.

          /home/sb/SameTest.php:6

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

 assertSelectCount()

 

assertSelectCount(array $selector, integer $count, mixed $actual[, string $message = '', boolean $isHtml = TRUE])

Сообщает об ошибке $message если CSS селектор $selector выбирает из DOMNode $actual отличное от $count количество элементов.

$count может быть одного из перечисленных типов:

  • boolean: Проверяет простое наличие (TRUE) или отсутствие (FALSE) элементов соответствующих селектору.
  • integer: Проверяет количество элементов.
  • array: Проверяет что количество элементов находится в заданном диапазоне заданном ключами массива в виде <, >, <=, и >=.
 

Пример 4.48. Использование assertSelectCount()

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

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

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

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

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

          FFFF

          Time: 0 seconds, Memory: 5.50Mb

          There were 4 failures:

          1) SelectCountTest::testAbsenceFailure
          Failed asserting that true is false.

          /home/sb/SelectCountTest.php:12

          2) SelectCountTest::testPresenceFailure
          Failed asserting that false is true.

          /home/sb/SelectCountTest.php:17

          3) SelectCountTest::testExactCountFailure
          Failed asserting that 3 matches expected 5.

          /home/sb/SelectCountTest.php:22

          4) SelectCountTest::testRangeFailure
          Failed asserting that false is true.

          /home/sb/SelectCountTest.php:27

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

 assertSelectEquals()

 

assertSelectEquals(array $selector, string $content, integer $count, mixed $actual[, string $message = '', boolean $isHtml = TRUE])

Сообщает об ошибке $message если CSS селектор $selector выбирает из DOMNode $actual отличное от $count количество элементов со значением $content.

$count может быть одного из перечисленных типов:

  • boolean: Проверяет простое наличие (TRUE) или отсутствие (FALSE) элементов соответствующих селектору.
  • integer: Проверяет количество элементов.
  • array: Проверяет что количество элементов находится в заданном диапазоне заданном ключами массива в виде <, >, <=, и >=.
 

Пример 4.49. Использование assertSelectEquals()

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

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

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

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

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

          FFFF

          Time: 0 seconds, Memory: 5.50Mb

          There were 4 failures:

          1) SelectEqualsTest::testAbsenceFailure
          Failed asserting that true is false.

          /home/sb/SelectEqualsTest.php:12

          2) SelectEqualsTest::testPresenceFailure
          Failed asserting that false is true.

          /home/sb/SelectEqualsTest.php:17

          3) SelectEqualsTest::testExactCountFailure
          Failed asserting that 2 matches expected 5.

          /home/sb/SelectEqualsTest.php:22

          4) SelectEqualsTest::testRangeFailure
          Failed asserting that false is true.

          /home/sb/SelectEqualsTest.php:27

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

 assertSelectRegExp()

 

assertSelectRegExp(array $selector, string $pattern, integer $count, mixed $actual[, string $message = '', boolean $isHtml = TRUE])

Сообщает об ошибке $message если CSS селектор $selector выбирает из DOMNode $actual отличное от $count количество элементов со значением которое соответствуе регулярному выражению $pattern.

$count может быть одного из перечисленных типов:

  • boolean: Проверяет простое наличие (TRUE) или отсутствие (FALSE) элементов соответствующих селектору.
  • integer: Проверяет количество элементов.
  • array: Проверяет что количество элементов находится в заданном диапазоне заданном ключами массива в виде <, >, <=, и >=.
 

Пример 4.50. Использование assertSelectRegExp()

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

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

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

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

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

          FFFF

          Time: 0 seconds, Memory: 5.50Mb

          There were 4 failures:

          1) SelectRegExpTest::testAbsenceFailure
          Failed asserting that true is false.

          /home/sb/SelectRegExpTest.php:12

          2) SelectRegExpTest::testPresenceFailure
          Failed asserting that false is true.

          /home/sb/SelectRegExpTest.php:17

          3) SelectRegExpTest::testExactCountFailure
          Failed asserting that 2 matches expected 5.

          /home/sb/SelectRegExpTest.php:22

          4) SelectRegExpTest::testRangeFailure
          Failed asserting that false is true.

          /home/sb/SelectRegExpTest.php:27

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

 assertStringEndsWith()

  

assertStringEndsWith(string $suffix, string $string[, string $message = ''])

Сообщает об ошибке $message если строка $string не заканчивается строкой $suffix.

assertStringEndsNotWith() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.51. Использование assertStringEndsWith()

<?php
class StringEndsWithTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertStringEndsWith('suffix', 'foo');
    }
}
?>
phpunit StringEndsWithTest
PHPUnit 3.7.0 by Sebastian Bergmann.

F

Time: 1 second, Memory: 5.00Mb

There was 1 failure:

1) StringEndsWithTest::testFailure
Failed asserting that 'foo' ends with "suffix".

/home/sb/StringEndsWithTest.php:6

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

 assertStringEqualsFile()

  

assertStringEqualsFile(string $expectedFile, string $actualString[, string $message = ''])

Сообщает об ошибке $message если файл указанный $expectedFile не содержит строки $actualString.

assertStringNotEqualsFile() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.52. Использование assertStringEqualsFile()

<?php
class StringEqualsFileTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertStringEqualsFile('/home/sb/expected', 'actual');
    }
}
?>
phpunit StringEqualsFileTest
          PHPUnit 3.7.0 by Sebastian Bergmann.

          F

          Time: 0 seconds, Memory: 5.25Mb

          There was 1 failure:

          1) StringEqualsFileTest::testFailure
          Failed asserting that two strings are equal.
          --- Expected
          +++ Actual
          @@ @@
          -'expected
          -'
          +'actual'

          /home/sb/StringEqualsFileTest.php:6

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

 assertStringStartsWith()

  

assertStringStartsWith(string $prefix, string $string[, string $message = ''])

Сообщает об ошибке $message если строка $string не начинается строкой $prefix.

assertStringStartsNotWith() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.53. Использование assertStringStartsWith()

<?php
class StringStartsWithTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertStringStartsWith('prefix', 'foo');
    }
}
?>
phpunit StringStartsWithTest
PHPUnit 3.7.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) StringStartsWithTest::testFailure
Failed asserting that 'foo' starts with "prefix".

/home/sb/StringStartsWithTest.php:6

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

 assertTag()

  

assertTag(array $matcher, string $actual[, string $message = '', boolean $isHtml = TRUE])

Сообщает об ошибке $message если $actual не соответствует спецификации $matcher.

$matcher - это ассоциативный массив который описывает критерии соответствия для допущения:

  • id: Значение которому должен быть равен аттрибут id элемента.
  • tag: Ожидаемый тип элемента.
  • attributes: Аттрибуты элемента должны совпадать с соответствующими значениями в ассоциативном массиве $attributes.
  • content: Текстовое содержимое элемента должно совпадать со значением этого ключа массива.
  • parent: Родитель элемента должен совпадать с описаным в ассоциативном масиве $parent.
  • child: Хотя бы один прямой потомок элемента должен соответствовать критериям ассоциативного массива$child.
  • ancestor: Хотя бы один из предков элемента должен соответствовать критериям из массива $ancestor.
  • descendant: Хотя бы один из потомков (включая непрямых) должен соответствовать критериям из массива $descendant.
  • children: Ассоциативный массив количества прямых потомков
    • count: Количество потомков должно быть равно этому числу.
    • less_than: Количество потомков должно быть меньше этого числа.
    • greater_than: Количество потомков должно быть больше этого числа.
    • only: Еще один ассоциативный массив состоящий из ключей соответствующих потомкам и только соответствующие потомки будут учтены.

assertNotTag() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.54. Использование assertTag()

<?php
// Массив который описывает элемент с id="my_id".
$matcher = array('id' => 'my_id');

// Массив описывающий наличие тега "span".
$matcher = array('tag' => 'span');

// Массив описывающий наличие тега "span" содержащего текст
// "Hello World".
$matcher = array('tag' => 'span', 'content' => 'Hello World');

// Массив описывающий наличие тега "span" содержащего текст
// соответствующий регулярному выражению
$matcher = array('tag' => 'span', 'content' => '/Try P(HP|ython)/');

// Массив описывающий наличие тега "span" с аттрибутом class равным "list".
$matcher = array(
  'tag'        => 'span',
  'attributes' => array('class' => 'list')
);

// Массив описывающий наличие тега "span" непосредственно внутри тега "div".
$matcher = array(
  'tag'    => 'span',
  'parent' => array('tag' => 'div')
);

// Массив описывающий наличие тега "span" где-то внутри тега "table".
$matcher = array(
  'tag'      => 'span',
  'ancestor' => array('tag' => 'table')
);

// Массив описывающий наличие тега "span" с хотя бы одним "em" среди прямых потомков.
$matcher = array(
  'tag'   => 'span',
  'child' => array('tag' => 'em')
);

// Массив описывающий наличие тега "span" с хотя бы одним "strong" где-то среди потомков включая непрямых.
$matcher = array(
  'tag'        => 'span',
  'descendant' => array('tag' => 'strong')
);

// Массив описывающий наличие тега "span" содержащего "em" тегов
// в качестве прямых потомков.
$matcher = array(
  'tag'      => 'span',
  'children' => array(
    'less_than'    => 11,
    'greater_than' => 4,
    'only'         => array('tag' => 'em')
  )
);

// Массив описывающий наличие тега "div", среди предков котрого есть "ul" а тег "li"
// (с классом "enum") является его прямым предком, содержащий где-то среди потомков тег "span" который содержит
// тег с id="my_test" и текстом "Hello World".
$matcher = 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'
    )
  )
);

// Использование assertTag() для роверки наличия элемента $matcher в переменной $html.
$this->assertTag($matcher, $html);

// Использование assertTag() для роверки наличия элемента $matcher в переменной $xml.
$this->assertTag($matcher, $xml, '', FALSE);
?>

 assertThat()

 

Более сложные утверждения могут быть сформулированы с использованием классов PHPUnit_Framework_Constraint. Они могут быть вычислены с использованием метода assertThat(). Пример 4.55, «Использование assertThat()» показывает как с помощью условий logicalNot() и equalTo() можно выразить то же утверждение что и с помощью assertNotEquals().

assertThat(mixed $value, PHPUnit_Framework_Constraint $constraint[, $message = ''])

Сообщает об ошибке $message если значение $value не соответствует условию $constraint.

 

Пример 4.55. Использование assertThat()

<?php
class BiscuitTest extends PHPUnit_Framework_TestCase
{
    public function testEquals()
    {
        $theBiscuit = new Biscuit('Ginger');
        $myBiscuit  = new Biscuit('Ginger');

        $this->assertThat(
          $theBiscuit,
          $this->logicalNot(
            $this->equalTo($myBiscuit)
          )
        );
    }
}
?>

Таблица 4.3, «Условия» показывает набор доступных под-классов PHPUnit_Framework_Constraint.

 

Таблица 4.3. Условия

УсловиеЗначение
PHPUnit_Framework_Constraint_Attribute attribute(PHPUnit_Framework_Constraint $constraint, $attributeName) Условие которое применяет другое условие к класса или объекта.
PHPUnit_Framework_Constraint_IsAnything anything() Этому условию удовлетворяет любое входное значение.
PHPUnit_Framework_Constraint_ArrayHasKey arrayHasKey(mixed $key) Этому условию соответствует массив содержит ключ $key.
PHPUnit_Framework_Constraint_TraversableContains contains(mixed $value) Этому условию соответствует массив или объект предоставляющий интерфейс Iterator который содержит некоторое значение $value.
PHPUnit_Framework_Constraint_TraversableContainsOnly containsOnly(string $type) Этому условию соответствует массив или объект предоставляющий интерфейс Iterator содержащий только значения определённого типа.
PHPUnit_Framework_Constraint_TraversableContainsOnly containsOnlyInstancesOf(string $classname) Этому условию соответствует массив или объект предоставляющий интерфейс Iterator содержащий только экземпляры класса определённого класса.
PHPUnit_Framework_Constraint_IsEqual equalTo($value, $delta = 0, $maxDepth = 10) Проверяет на равенство с заданной погрешностью и глубиной вложенности.
PHPUnit_Framework_Constraint_Attribute attributeEqualTo($attributeName, $value, $delta = 0, $maxDepth = 10) Проверяет на равенство аттрибута сласса или объекта заданному значению.
PHPUnit_Framework_Constraint_FileExists fileExists() Проверяет что файл с таким именем существует.
PHPUnit_Framework_Constraint_GreaterThan greaterThan(mixed $value) Этому условию соответствует значение большее чем некое заданное $value.
PHPUnit_Framework_Constraint_Or greaterThanOrEqual(mixed $value) Этому условию соответствует значение большее либо равное заданному $value.
PHPUnit_Framework_Constraint_ClassHasAttribute classHasAttribute(string $attributeName) Этому условию соответствует класс содержащий заданный аттрибут.
PHPUnit_Framework_Constraint_ClassHasStaticAttribute classHasStaticAttribute(string $attributeName) Этому условию соответствует класс содержащий заданный статический аттрибут.
PHPUnit_Framework_Constraint_ObjectHasAttribute hasAttribute(string $attributeName) Этому условию соответствует объект содержащий заданный аттрибут.
PHPUnit_Framework_Constraint_IsIdentical identicalTo(mixed $value) Этому условию соответствуют полностью идентичные значения.
PHPUnit_Framework_Constraint_IsFalse isFalse() Этому условию соответствует переменная когда она равна логическому FALSE.
PHPUnit_Framework_Constraint_IsInstanceOf isInstanceOf(string $className) Этому условию соответствует объект являющийся экземпляром заданного класса.
PHPUnit_Framework_Constraint_IsNull isNull() Этому условию соответствует переменная когда она равна NULL.
PHPUnit_Framework_Constraint_IsTrue isTrue() Этому условию соответствует переменная когда она равна логическому TRUE.
PHPUnit_Framework_Constraint_IsType isType(string $type) Этому условию соответствует переменная когда она принадлежит к заданному типу.
PHPUnit_Framework_Constraint_LessThan lessThan(mixed $value) Этому условию соответствует значение меньшее чем некое заданное $value.
PHPUnit_Framework_Constraint_Or lessThanOrEqual(mixed $value) Этому условию соответствует значение меньшее либо равное заданному $value.
logicalAnd() Логическое И.
logicalNot(PHPUnit_Framework_Constraint $constraint) Логическое НЕ.
logicalOr() Логическое ИЛИ.
logicalXor() Логическое взаимоисключающее ИЛИ.
PHPUnit_Framework_Constraint_PCREMatch matchesRegularExpression(string $pattern) Проверяет соответствие строки заданному регулярному выражению.
PHPUnit_Framework_Constraint_StringContains stringContains(string $string, bool $case) Проверяет что заданная подстрока содержится в строке.
PHPUnit_Framework_Constraint_StringEndsWith stringEndsWith(string $suffix) Проверяет что строка оканчивается на заданный суфикс.
PHPUnit_Framework_Constraint_StringStartsWith stringStartsWith(string $prefix) Проверяет что строка начинается с заданного префикса.

 assertTrue()

 

assertTrue(bool $condition[, string $message = ''])

Сообщает об ошибке $message если $condition равно логическому FALSE.

 

Пример 4.56. Использование assertTrue()

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

          F

          Time: 0 seconds, Memory: 5.00Mb

          There was 1 failure:

          1) TrueTest::testFailure
          Failed asserting that false is true.

          /home/sb/TrueTest.php:6

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

 assertXmlFileEqualsXmlFile()

  

assertXmlFileEqualsXmlFile(string $expectedFile, string $actualFile[, string $message = ''])

Сообщает об ошибке $message если XML документ в файле $actualFile не равен XML документу из файла $expectedFile.

assertXmlFileNotEqualsXmlFile() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.57. Использование assertXmlFileEqualsXmlFile()

<?php
class XmlFileEqualsXmlFileTest extends PHPUnit_Framework_TestCase
{
    public function testFailure()
    {
        $this->assertXmlFileEqualsXmlFile(
          '/home/sb/expected.xml', '/home/sb/actual.xml');
    }
}
?>
phpunit XmlFileEqualsXmlFileTest
PHPUnit 3.7.0 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

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

/home/sb/XmlFileEqualsXmlFileTest.php:7

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

 assertXmlStringEqualsXmlFile()

  

assertXmlStringEqualsXmlFile(string $expectedFile, string $actualXml[, string $message = ''])

Сообщает об ошибке $message если XML документ в строке $actualXml не равен XML документу из файла $expectedFile.

assertXmlStringNotEqualsXmlFile() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.58. Использование assertXmlStringEqualsXmlFile()

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

F

Time: 0 seconds, Memory: 5.25Mb

There was 1 failure:

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

/home/sb/XmlStringEqualsXmlFileTest.php:7

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

 assertXmlStringEqualsXmlString()

  

assertXmlStringEqualsXmlString(string $expectedXml, string $actualXml[, string $message = ''])

Сообщает об ошибке $message если XML документ в строке $actualXml не равен XML документу в строке $expectedXml.

assertXmlStringNotEqualsXmlString() утверждает обратное и принимает тот же набор аргументов.

 

Пример 4.59. Использование assertXmlStringEqualsXmlString()

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

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

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

/home/sb/XmlStringEqualsXmlStringTest.php:7

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

27.03.2017 15:31