Spec-Zone.ru › PHPUnit

Утверждения

В этом приложении перечислены различные методы утверждений, которые доступны.

Использование статических и нестатических методов утверждений

Утверждения PHPUnit реализованы в PHPUnit\Framework\Assert. PHPUnit\Framework\TestCase наследуется от PHPUnit\Framework\Assert.

Методы утверждений объявлены статическими и могут быть вызваны из любого контекста, например, с помощью PHPUnit\Framework\Assert::assertTrue(), или с помощью $this->assertTrue() или self::assertTrue(), например, в классе, который расширяет PHPUnit\Framework\TestCase. Вы даже можете использовать обёртки глобальных функций, такие как assertTrue().

Часто задаваемый вопрос, особенно разработчиками, новым для PHPUnit, — это вопрос о том, является ли использование $this->assertTrue() или self::assertTrue(), например, «правильным» способом вызова утверждения. Короткий ответ: нет правильного способа. И нет неправильного способа. Это вопрос личных предпочтений.

Для большинства людей использование $this->assertTrue() просто «чувствуется правильно», поскольку метод теста вызывается на объекте теста. Тот факт, что методы утверждений объявлены статическими, позволяет использовать (переиспользовать) их вне области видимости объекта теста. Наконец, обёртки глобальных функций позволяют разработчикам писать меньше символов (assertTrue() вместо $this->assertTrue() или self::assertTrue()).

Булево

assertTrue()

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

Отчитывается об ошибке, идентифицированной по $message, если $condition имеет значение false.

assertNotTrue() — это обратное утверждение и принимает те же аргументы.

Пример 1.1 Использование assertTrue()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class TrueTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertTrue(false);
    }
}

Выполнение показанного выше теста даёт результат, показанный ниже:

./tools/phpunit tests/TrueTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/TrueTest.php:8

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

assertFalse()

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

Отчитывается об ошибке, идентифицированной по $message, если $condition имеет значение true.

assertNotFalse() — это обратное утверждение и принимает те же аргументы.

Пример 1.2 Использование assertFalse()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class FalseTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertFalse(true);
    }
}

Выполнение показанного выше теста даёт результат, показанный ниже:

./tools/phpunit tests/FalseTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/FalseTest.php:8

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

Тождество

assertSame()

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

Отчитывается об ошибке, идентифицированной по $message, если два переменных $expected и $actual не имеют одинакового типа и значения.

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

Пример 1.3 Использование assertSame()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class SameWithMixedTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertSame('2204', 2204);
    }
}

Выполнение показанного выше теста даёт результат, показанный ниже:

./tools/phpunit tests/SameWithMixedTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/SameWithMixedTest.php:8

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

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

Отчитывается об ошибке, идентифицированной по $message, если две переменные $expected и $actual не ссылаются на один и тот же объект.

Пример 1.4 Использование assertSame() с объектами
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class SameWithObjectsTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertSame(new stdClass, new stdClass);
    }
}

Выполнение показанного выше теста даёт результат, показанный ниже:

./tools/phpunit tests/SameWithObjectsTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/SameWithObjectsTest.php:8

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

Проверка тождества выполняется с помощью оператора ===.

assertArrayIsIdenticalToArrayOnlyConsideringListOfKeys()

assertArrayIsIdenticalToArrayOnlyConsideringListOfKeys(array $expected, array $actual, array $keysToBeConsidered[, string $message])

Отчитывается об ошибке, идентифицированной по $message, если два массива не идентичны, рассматривая только элементы массива, для которых указаны ключи.

Пример 1.5 Использование assertArrayIsIdenticalToArrayOnlyConsideringListOfKeys()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ArrayIsIdenticalToArrayOnlyConsideringListOfKeysTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertArrayIsIdenticalToArrayOnlyConsideringListOfKeys(
            [
                'timestamp' => time(),
                'foo'       => 'bar',
            ],
            [
                'timestamp' => time(),
                'foo'       => 'baz',
            ],
            [
                'foo',
            ]
        );
    }
}

Выполнение показанного выше теста даёт результат, показанный ниже:

./tools/phpunit tests/ArrayIsIdenticalToArrayOnlyConsideringListOfKeysTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ArrayIsIdenticalToArrayOnlyConsideringListOfKeysTest::testFailure
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
 Array &0 [
-    'foo' => 'bar',
+    'foo' => 'baz',
 ]

/path/to/tests/ArrayIsIdenticalToArrayOnlyConsideringListOfKeysTest.php:8

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

assertArrayIsIdenticalToArrayIgnoringListOfKeys()

assertArrayIsIdenticalToArrayIgnoringListOfKeys(array $expected, array $actual, array $keysToBeIgnored[, string $message])

Отчитывается об ошибке, идентифицированной по $message, если два массива не идентичны, игнорируя элементы массива, для которых указаны ключи.

Пример 1.6 Использование assertArrayIsIdenticalToArrayIgnoringListOfKeys()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ArrayIsIdenticalToArrayIgnoringListOfKeysTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertArrayIsIdenticalToArrayIgnoringListOfKeys(
            [
                'timestamp' => time(),
                'foo'       => 'bar',
            ],
            [
                'timestamp' => time(),
                'foo'       => 'baz',
            ],
            [
                'timestamp',
            ]
        );
    }
}

Выполнение показанного выше теста даёт результат, показанный ниже:

./tools/phpunit tests/ArrayIsIdenticalToArrayIgnoringListOfKeysTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ArrayIsIdenticalToArrayIgnoringListOfKeysTest::testFailure
Failed asserting that two arrays are identical.
--- Expected
+++ Actual
@@ @@
 Array &0 [
-    'foo' => 'bar',
+    'foo' => 'baz',
 ]

/path/to/tests/ArrayIsIdenticalToArrayIgnoringListOfKeysTest.php:8

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

Равенство

assertEquals()

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

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

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

Пример 1.7 Использование assertEquals()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EqualsTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertEquals(1, 0);
    }

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

    public function testFailure3(): void
    {
        $this->assertEquals("foo\nbar\nbaz\n", "foo\nbah\nbaz\n");
    }
}

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/EqualsTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

FFF                                                                 3 / 3 (100%)

Time: 00:00.001, Memory: 25.29 MB

There were 3 failures:

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

/path/to/tests/EqualsTest.php:8

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

/path/to/tests/EqualsTest.php:13

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

/path/to/tests/EqualsTest.php:18

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

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

assertEquals(DateTimeInterface $expected, DateTimeInterface $actual[, string $message])

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

Пример 1.8 Использование assertEquals() с DateTimeImmutable объектами
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EqualsWithDateTimeImmutableTest extends TestCase
{
    public function testFailure(): void
    {
        $expected = new DateTimeImmutable('2023-02-23 01:23:45');
        $actual   = new DateTimeImmutable('2023-02-23 01:23:46');

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

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/EqualsWithDateTimeImmutableTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) EqualsWithDateTimeImmutableTest::testFailure
Failed asserting that two DateTime objects are equal.
--- Expected
+++ Actual
@@ @@
-2023-02-23T01:23:45.000000+0100
+2023-02-23T01:23:46.000000+0100

/path/to/tests/EqualsWithDateTimeImmutableTest.php:11

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

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

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

Пример 1.9 Использование assertEquals() с DOMDocument объектами
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EqualsWithDomDocumentTest extends TestCase
{
    public function testFailure(): void
    {
        $expected = new DOMDocument;
        $expected->loadXML('<foo><bar/></foo>');

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

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

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/EqualsWithDomDocumentTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/EqualsWithDomDocumentTest.php:14

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

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

Сообщает об ошибке, идентифицированной $message, если два объекта $expected и $actual не имеют равных значений свойств.

Пример 1.10 Использование assertEquals() с объектами
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EqualsWithObjectsTest extends TestCase
{
    public function testFailure(): void
    {
        $expected      = new stdClass;
        $expected->foo = 'foo';
        $expected->bar = 'bar';

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

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

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/EqualsWithObjectsTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/EqualsWithObjectsTest.php:16

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

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

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

Пример 1.11 Использование assertEquals() с массивами
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EqualsWithArraysTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertEquals(['a', 'b', 'c'], ['a', 'c', 'd']);
    }
}

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/EqualsWithArraysTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/EqualsWithArraysTest.php:8

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

assertEqualsCanonicalizing()

assertEqualsCanonicalizing(mixed $expected, mixed $actual[, string $message])

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

Содержание $expected и $actual канонизируется перед сравнением. Например, когда две переменные $expected и $actual представляют собой массивы, эти массивы сортируются перед сравнением. Когда $expected и $actual представляют собой объекты, каждый объект преобразуется в массив, содержащий все приватные, защищённые и публичные свойства.

assertNotEqualsCanonicalizing() — это обратное утверждение и принимает те же аргументы.

Пример 1.12 Использование assertEqualsCanonicalizing()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EqualsWithArraysCanonicalizingTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertEqualsCanonicalizing([3, 2, 1], [2, 3, 0, 1]);
    }
}

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/EqualsWithArraysCanonicalizingTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) EqualsWithArraysCanonicalizingTest::testFailure
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
 Array (
-    0 => 1
-    1 => 2
-    2 => 3
+    0 => 0
+    1 => 1
+    2 => 2
+    3 => 3
 )

/path/to/tests/EqualsWithArraysCanonicalizingTest.php:8

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

assertEqualsIgnoringCase()

assertEqualsIgnoringCase(mixed $expected, mixed $actual[, string $message])

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

Различия в регистре игнорируются при сравнении $expected и $actual.

assertNotEqualsIgnoringCase() — это обратное утверждение и принимает те же аргументы.

Пример 1.13 Использование assertEqualsIgnoringCase()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EqualsWithStringsIgnoringCaseTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertEqualsIgnoringCase('foo', 'BAR');
    }
}

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/EqualsWithStringsIgnoringCaseTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) EqualsWithStringsIgnoringCaseTest::testFailure
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-'foo'
+'BAR'

/path/to/tests/EqualsWithStringsIgnoringCaseTest.php:8

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

assertEqualsWithDelta()

assertEqualsWithDelta(mixed $expected, mixed $actual, float $delta[, string $message])

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

Прочитайте «Что каждый компьютерный учёный должен знать о плавающей арифметике», чтобы понять, почему $delta необходимо.

assertNotEqualsWithDelta() — это обратное утверждение и принимает те же аргументы.

Пример 1.14 Использование assertEqualsWithDelta()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EqualsWithFloatsAndDeltaTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertEqualsWithDelta(1.0, 1.5, 0.1);
    }
}

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/EqualsWithFloatsAndDeltaTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) EqualsWithFloatsAndDeltaTest::testFailure
Failed asserting that 1.5 matches expected 1.0.

/path/to/tests/EqualsWithFloatsAndDeltaTest.php:8

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

assertObjectEquals()

assertObjectEquals(object $expected, object $actual, string $method = 'equals'[, string $message])

Сообщает об ошибке, идентифицированной $message, если $actual не равно $expected в соответствии с $actual->$method($expected).

Не рекомендуется использовать assertEquals() (и его обратное утверждение assertNotEquals()) для объектов без регистрации пользовательского компаратора, настраивающего сравнение объектов. К сожалению, реализация пользовательских компараторов для каждого объекта, который вы хотите проверить в тестах, неудобна в лучшем случае.

Наиболее распространённый случай использования пользовательских компараторов — это Value Objects. Эти объекты обычно имеют метод equals(self $other): bool (или метод, похожий на него, но с другим именем) для сравнения двух экземпляров типа Value Object. assertObjectEquals() упрощает пользовательское сравнение объектов в этом распространённом случае:

assertObjectNotEquals() — это обратное утверждение и принимает те же аргументы.

Пример 1.15 Использование assertObjectEquals()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ObjectEqualsTest extends TestCase
{
    public function testSomething(): void
    {
        $a = new Email('user@example.org');
        $b = new Email('user@example.org');
        $c = new Email('user@example.com');

        // This passes
        $this->assertObjectEquals($a, $b);

        // This fails
        $this->assertObjectEquals($a, $c);
    }
}

Запуск показанного выше теста даёт вывод, показанный ниже:

./tools/phpunit tests/ObjectEqualsTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ObjectEqualsTest::testSomething
Failed asserting that two objects are equal.

/path/to/tests/ObjectEqualsTest.php:16

FAILURES!
Tests: 1, Assertions: 2, Failures: 1.
Пример 1.16 Объект значения Email с методом equals()
<?php declare(strict_types=1);
final class Email
{
    private string $email;

    public function __construct(string $email)
    {
        $this->ensureIsValidEmail($email);

        $this->email = $email;
    }

    public function asString(): string
    {
        return $this->email;
    }

    public function equals(self $other): bool
    {
        return $this->asString() === $other->asString();
    }

    private function ensureIsValidEmail(string $email): void
    {
        // ...
    }
}

Обратите внимание:

  • Метод с именем $method должен существовать в объекте $actual

  • Метод должен принимать ровно один аргумент

  • Соответствующий параметр должен иметь объявленный тип

  • Объект $expected должен быть совместим с этим объявленным типом

  • Метод должен иметь объявленный тип возвращаемого значения bool

Если какое-либо из вышеперечисленных предположений не выполняется или если $actual->$method($expected) возвращает false, то утверждение завершается неудачей.

assertFileEquals()

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

Сообщает об ошибке, идентифицированной $message, если файл, указанный по $expected, не содержит тех же данных, что и файл, указанный по $actual.

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

assertFileEqualsCanonicalizing() (и assertFileNotEqualsCanonicalizing()), а также assertFileEqualsIgnoringCase() (и assertFileNotEqualsIgnoringCase()) делают для файлов то же, что assertEqualsCanonicalizing() (и assertNotEqualsCanonicalizing()), а также assertEqualsIgnoringCase() (и assertNotEqualsIgnoringCase()) делают для строк.

Пример 1.17 Использование assertFileEquals()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class FileEqualsTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertFileEquals(
            __DIR__ . '/expected.txt',
            __DIR__ . '/actual.txt',
        );
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/FileEqualsTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/FileEqualsTest.php:8

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

assertArrayIsEqualToArrayOnlyConsideringListOfKeys()

assertArrayIsEqualToArrayOnlyConsideringListOfKeys(array $expected, array $actual, array $keysToBeConsidered[, string $message])

Сообщает об ошибке, идентифицированной по $message, если два массива не равны, учитывая только элементы массива, для которых указаны ключи.

Пример 1.18 Использование assertArrayIsEqualToArrayOnlyConsideringListOfKeys()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ArrayIsEqualToArrayOnlyConsideringListOfKeysTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertArrayIsEqualToArrayOnlyConsideringListOfKeys(
            [
                'timestamp' => time(),
                'foo'       => 'bar',
            ],
            [
                'timestamp' => time(),
                'foo'       => 'baz',
            ],
            [
                'foo',
            ]
        );
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ArrayIsEqualToArrayOnlyConsideringListOfKeysTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ArrayIsEqualToArrayOnlyConsideringListOfKeysTest::testFailure
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
 Array (
-    'foo' => 'bar'
+    'foo' => 'baz'
 )

/path/to/tests/ArrayIsEqualToArrayOnlyConsideringListOfKeysTest.php:8

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

assertArrayIsEqualToArrayIgnoringListOfKeys()

assertArrayIsEqualToArrayIgnoringListOfKeys(array $expected, array $actual, array $keysToBeIgnored[, string $message])

Сообщает об ошибке, идентифицированной по $message, если два массива не равны, игнорируя элементы массива, для которых указаны ключи.

Пример 1.19 Использование assertArrayIsEqualToArrayIgnoringListOfKeys()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ArrayIsEqualToArrayIgnoringListOfKeysTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertArrayIsEqualToArrayIgnoringListOfKeys(
            [
                'timestamp' => time(),
                'foo'       => 'bar',
            ],
            [
                'timestamp' => time(),
                'foo'       => 'baz',
            ],
            [
                'timestamp',
            ]
        );
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ArrayIsEqualToArrayIgnoringListOfKeysTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ArrayIsEqualToArrayIgnoringListOfKeysTest::testFailure
Failed asserting that two arrays are equal.
--- Expected
+++ Actual
@@ @@
 Array (
-    'foo' => 'bar'
+    'foo' => 'baz'
 )

/path/to/tests/ArrayIsEqualToArrayIgnoringListOfKeysTest.php:8

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

Iterable

assertArrayHasKey()

assertArrayHasKey(int|string $key, array|ArrayAccess $array[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $array не имеет $key.

assertArrayNotHasKey() является обратным этому утверждению и принимает те же аргументы.

Пример 1.20 Использование assertArrayHasKey()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ArrayHasKeyTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertArrayHasKey('foo', ['bar' => 'baz']);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ArrayHasKeyTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/ArrayHasKeyTest.php:8

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

assertContains()

assertContains(mixed $needle, iterable $haystack[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $needle не является элементом $haystack.

assertNotContains() является обратным этому утверждению и принимает те же аргументы.

Пример 1.21 Использование assertContains()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContains(4, [1, 2, 3]);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/ContainsTest.php:8

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

Проверка того, является ли $needle элементом $haystack, осуществляется с помощью оператора ===. Вы можете использовать assertContainsEquals() (и assertNotContainsEquals()), если вам нужна логика сравнения, реализованная оператором ==.

assertContainsOnly()

assertContainsOnly(string $type, iterable $haystack[, boolean $isNativeType = null, string $message = ''])

Сообщает об ошибке, идентифицированной как $message, если $haystack содержит не только переменные типа $type.

$isNativeType — это флаг, указывающий, является ли $type собственным типом PHP.

Поддерживаются следующие строки для $type, когда $isNativeType является true: array, bool, boolean, callable, double, float, int, integer, iterable, null, numeric, object, real, resource, scalar или string.

assertNotContainsOnly() является обратным этому утверждению и принимает те же аргументы.

Пример 1.22 Использование assertContainsOnly()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnly('string', ['1', '2', 3]);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsOnlyTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/ContainsOnlyTest.php:8

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

Устаревание: assertContainsOnly() устарел

Начиная с PHPUnit 12.0, метод assertContainsOnly() является устаревшим. Использование этого метода вызовет предупреждение об устаревании. Метод будет удален в PHPUnit 13.

assertContainsOnlyArray()

assertContainsOnlyArray(iterable $haystack[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $haystack содержит не только значения типа array.

assertContainsNotOnlyArray() является обратным этому утверждению и принимает те же аргументы.

Пример 1.23 Использование assertContainsOnlyArray()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyArrayTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyArray([null]);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsOnlyArrayTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyArrayTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "array".

/path/to/tests/ContainsOnlyArrayTest.php:8

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

assertContainsOnlyBool()

assertContainsOnlyBool(iterable $haystack[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $haystack содержит не только значения типа bool.

assertContainsNotOnlyBool() является обратным этому утверждению и принимает те же аргументы.

Пример 1.24 Использование assertContainsOnlyBool()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyBoolTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyBool([null]);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsOnlyBoolTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyBoolTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "bool".

/path/to/tests/ContainsOnlyBoolTest.php:8

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

assertContainsOnlyCallable()

assertContainsOnlyCallable(iterable $haystack[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $haystack содержит не только значения типа callable.

assertContainsNotOnlyCallable() является обратным этому утверждению и принимает те же аргументы.

Пример 1.25 Использование assertContainsOnlyCallable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyCallableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyCallable([null]);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsOnlyCallableTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyCallableTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "callable".

/path/to/tests/ContainsOnlyCallableTest.php:8

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

assertContainsOnlyFloat()

assertContainsOnlyFloat(iterable $haystack[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $haystack содержит не только значения типа float.

assertContainsNotOnlyFloat() является обратным этому утверждению и принимает те же аргументы.

Пример 1.26 Использование assertContainsOnlyFloat()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyFloatTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyFloat([null]);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsOnlyFloatTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyFloatTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "float".

/path/to/tests/ContainsOnlyFloatTest.php:8

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

assertContainsOnlyInt()

assertContainsOnlyInt(iterable $haystack[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $haystack содержит не только значения типа int.

assertContainsNotOnlyInt() является обратным этому утверждению и принимает те же аргументы.

Пример 1.27 Использование assertContainsOnlyInt()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyIntTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyInt([null]);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsOnlyIntTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyIntTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "int".

/path/to/tests/ContainsOnlyIntTest.php:8

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

assertContainsOnlyIterable()

assertContainsOnlyIterable(iterable $haystack[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $haystack содержит не только значения типа iterable.

assertContainsNotOnlyInt() является обратным этому утверждению и принимает те же аргументы.

Пример 1.28 Использование assertContainsOnlyIterable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyIterableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyIterable([null]);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsOnlyIterableTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyIterableTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "iterable".

/path/to/tests/ContainsOnlyIterableTest.php:8

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

assertContainsOnlyNull()

assertContainsOnlyNull(iterable $haystack[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $haystack содержит не только значения типа null.

assertContainsNotOnlyNull() является обратным этому утверждению и принимает те же аргументы.

Пример 1.29 Использование assertContainsOnlyNull()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyNullTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyNull(['string']);
    }
}

Запуск показанного выше теста дает следующий результат:

./tools/phpunit tests/ContainsOnlyNullTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyNullTest::testFailure
Failed asserting that Array &0 [
    0 => 'string',
] contains only values of type "null".

/path/to/tests/ContainsOnlyNullTest.php:8

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

assertContainsOnlyNumeric()

assertContainsOnlyNumeric(iterable $haystack[, string $message])

Сообщает об ошибке, определённой $message, если $haystack не содержит только значения типа numeric.

assertContainsNotOnlyNumeric() — это обратная проверка и принимает те же аргументы.

Пример 1.30 Использование assertContainsOnlyNumeric()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyNumericTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyNumeric([null]);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ContainsOnlyNumericTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyNumericTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "numeric".

/path/to/tests/ContainsOnlyNumericTest.php:8

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

assertContainsOnlyObject()

assertContainsOnlyObject(iterable $haystack[, string $message])

Сообщает об ошибке, определённой $message, если $haystack не содержит только значения типа object.

assertContainsNotOnlyObject() — это обратная проверка и принимает те же аргументы.

Пример 1.31 Использование assertContainsOnlyObject()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyObjectTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyObject([null]);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ContainsOnlyObjectTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyObjectTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "object".

/path/to/tests/ContainsOnlyObjectTest.php:8

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

assertContainsOnlyResource()

assertContainsOnlyResource(iterable $haystack[, string $message])

Сообщает об ошибке, определённой $message, если $haystack не содержит только значения типа resource.

assertContainsNotOnlyResource() — это обратная проверка и принимает те же аргументы.

Пример 1.32 Использование assertContainsOnlyResource()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyResourceTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyResource([null]);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ContainsOnlyResourceTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyResourceTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "resource".

/path/to/tests/ContainsOnlyResourceTest.php:8

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

assertContainsOnlyClosedResource()

assertContainsOnlyClosedResource(iterable $haystack[, string $message])

Сообщает об ошибке, определённой $message, если $haystack не содержит только значения типа resource (closed).

assertContainsNotOnlyClosedResource() — это обратная проверка и принимает те же аргументы.

Пример 1.33 Использование assertContainsOnlyClosedResource()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyClosedResourceTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyClosedResource([null]);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ContainsOnlyClosedResourceTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyClosedResourceTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "resource (closed)".

/path/to/tests/ContainsOnlyClosedResourceTest.php:8

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

assertContainsOnlyScalar()

assertContainsOnlyScalar(iterable $haystack[, string $message])

Сообщает об ошибке, определённой $message, если $haystack не содержит только значения типа scalar.

assertContainsNotOnlyScalar() — это обратная проверка и принимает те же аргументы.

Пример 1.34 Использование assertContainsOnlyScalar()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyScalarTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyScalar([null]);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ContainsOnlyScalarTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyScalarTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "scalar".

/path/to/tests/ContainsOnlyScalarTest.php:8

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

assertContainsOnlyString()

assertContainsOnlyString(iterable $haystack[, string $message])

Сообщает об ошибке, определённой $message, если $haystack не содержит только значения типа string.

assertContainsNotOnlyString() — это обратная проверка и принимает те же аргументы.

Пример 1.35 Использование assertContainsOnlyString()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyStringTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyString([null]);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ContainsOnlyStringTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyStringTest::testFailure
Failed asserting that Array &0 [
    0 => null,
] contains only values of type "string".

/path/to/tests/ContainsOnlyStringTest.php:8

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

assertContainsOnlyInstancesOf()

assertContainsOnlyInstancesOf(string $type, iterable $haystack[, string $message])

Сообщает об ошибке, определённой $message, если $haystack не содержит только экземпляры класса или интерфейса $type.

assertContainsNotOnlyInstancesOf() — это обратная проверка и принимает те же аргументы.

Пример 1.36 Использование assertContainsOnlyInstancesOf()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ContainsOnlyInstancesOfTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertContainsOnlyInstancesOf(
            Foo::class,
            [new Foo, new Bar, new Foo],
        );
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ContainsOnlyInstancesOfTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ContainsOnlyInstancesOfTest::testFailure
Failed asserting that Array &0 [
    0 => Foo Object #360 (),
    1 => Bar Object #377 (),
    2 => Foo Object #364 (),
] contains only values of type "Foo".

/path/to/tests/ContainsOnlyInstancesOfTest.php:8

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

Объекты

assertObjectHasProperty()

assertObjectHasProperty(string $propertyName, object $object, string $message = '')

Сообщает об ошибке, определённой $message, если $object не имеет свойства с именем $propertyName.

assertObjectNotHasProperty() — это обратная проверка и принимает те же аргументы.

Пример 1.37 Использование assertObjectHasProperty()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class ObjectHasPropertyTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertObjectHasProperty('propertyName', new stdClass);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/ObjectHasPropertyTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) ObjectHasPropertyTest::testFailure
Failed asserting that object of class "stdClass" has property "propertyName".

/path/to/tests/ObjectHasPropertyTest.php:8

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

Мощность

assertCount()

assertCount(int $expectedCount, Countable|iterable $haystack[, string $message])

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

assertNotCount() — это обратная проверка с теми же аргументами.

Пример 1.38 Использование assertCount()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class CountTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertCount(0, ['foo']);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/CountTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/CountTest.php:8

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

Примечание

Обратите внимание, что assertCount() и assertNotCount() не поддерживают генераторы. Генераторы можно итерировать только один раз, и их нельзя клонировать. Передача генератора в assertCount() или assertNotCount(), следовательно, изменит состояние того, что должно быть только проверено.

assertSameSize()

assertSameSize(Countable|iterable $expected, Countable|iterable $actual[, string $message])

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

assertNotSameSize() — это обратная проверка с теми же аргументами.

Пример 1.39 Использование assertSameSize()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class SameSizeTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertSameSize([1, 2], [1]);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/SameSizeTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) SameSizeTest::testFailure
Failed asserting that actual size 1 matches expected size 2.

/path/to/tests/SameSizeTest.php:8

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

Примечание

Обратите внимание, что assertSameSize() и assertNotSameSize() не поддерживают генераторы. Генераторы можно итерировать только один раз, и их нельзя клонировать. Передача генератора в assertSameSize() или assertNotSameSize(), следовательно, изменит состояние того, что должно быть только проверено.

assertEmpty()

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

Сообщает об ошибке, определённой $message, если $actual не пусто.

assertNotEmpty() — это обратная проверка с теми же аргументами.

Пример 1.40 Использование assertEmpty()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class EmptyTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertEmpty(['foo']);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/EmptyTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/EmptyTest.php:8

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

Примечание

Обратите внимание, что assertEmpty() и assertNotEmpty() не поддерживают генераторы. Генераторы можно итерировать только один раз, и их нельзя клонировать. Передача генератора в assertEmpty() или assertNotEmpty(), следовательно, изменит состояние того, что должно быть только проверено.

assertGreaterThan()

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

Сообщает об ошибке, определённой $message, если значение $actual не больше значения $expected.

Пример 1.41 Использование assertGreaterThan()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class GreaterThanTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertGreaterThan(2, 1);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/GreaterThanTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/GreaterThanTest.php:8

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

assertGreaterThanOrEqual()

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

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

Пример 1.42 Использование assertGreaterThanOrEqual()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class GreaterThanOrEqualTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertGreaterThanOrEqual(2, 1);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/GreaterThanOrEqualTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/GreaterThanOrEqualTest.php:8

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

assertLessThan()

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

Сообщает об ошибке, определённой $message, если значение $actual не меньше значения $expected.

Пример 1.43 Использование assertLessThan()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class LessThanTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertLessThan(1, 2);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/LessThanTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/LessThanTest.php:8

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

assertLessThanOrEqual()

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

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

Пример 1.44 Использование assertLessThanOrEqual()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class LessThanOrEqualTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertLessThanOrEqual(1, 2);
    }
}

Запуск показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/LessThanOrEqualTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) LessThanOrEqualTest::testFailure
Failed asserting that 2 is equal to 1 or is less than 1.

/path/to/tests/LessThanOrEqualTest.php:8

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

Типы

assertInstanceOf()

assertInstanceOf(string $expected, mixed $actual[, string $message])

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

assertNotInstanceOf() является обратным этому утверждению и принимает те же аргументы.

Пример 1.45 Использование assertInstanceOf()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class InstanceOfTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertInstanceOf(RuntimeException::class, new Exception);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/InstanceOfTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/InstanceOfTest.php:8

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

assertIsArray()

assertIsArray(mixed $actual[, string $message])

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

assertIsNotArray() является обратным этому утверждению и принимает те же аргументы.

Пример 1.46 Использование assertIsArray()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsArrayTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsArray(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsArrayTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsArrayTest::testFailure
Failed asserting that null is of type array.

/path/to/tests/IsArrayTest.php:8

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

assertIsList()

assertIsList(mixed $actual[, string $message])

Сообщает об ошибке, идентифицированной как $message, если $actual не является массивом, где ключи представляют собой последовательные числа от 0 до count($actual) - 1.

Пример 1.47 Использование assertIsList()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsListTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsList([1 => 'foo', '3' => 'bar']);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsListTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsListTest::testFailure
Failed asserting that an array is a list.

/path/to/tests/IsListTest.php:8

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

assertIsBool()

assertIsBool(mixed $actual[, string $message])

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

assertIsNotBool() является обратным этому утверждению и принимает те же аргументы.

Пример 1.48 Использование assertIsBool()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsBoolTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsBool(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsBoolTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsBoolTest::testFailure
Failed asserting that null is of type bool.

/path/to/tests/IsBoolTest.php:8

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

assertIsCallable()

assertIsCallable(mixed $actual[, string $message])

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

assertIsNotCallable() является обратным этому утверждению и принимает те же аргументы.

Пример 1.49 Использование assertIsCallable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsCallableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsCallable(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsCallableTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsCallableTest::testFailure
Failed asserting that null is of type callable.

/path/to/tests/IsCallableTest.php:8

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

assertIsFloat()

assertIsFloat(mixed $actual[, string $message])

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

assertIsNotFloat() является обратным этому утверждению и принимает те же аргументы.

Пример 1.50 Использование assertIsFloat()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsFloatTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsFloat(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsFloatTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsFloatTest::testFailure
Failed asserting that null is of type float.

/path/to/tests/IsFloatTest.php:8

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

assertIsInt()

assertIsInt(mixed $actual[, string $message])

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

assertIsNotInt() является обратным этому утверждению и принимает те же аргументы.

Пример 1.51 Использование assertIsInt()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsIntTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsInt(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsIntTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsIntTest::testFailure
Failed asserting that null is of type int.

/path/to/tests/IsIntTest.php:8

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

assertIsIterable()

assertIsIterable(mixed $actual[, string $message])

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

assertIsNotIterable() является обратным этому утверждению и принимает те же аргументы.

Пример 1.52 Использование assertIsIterable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsIterableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsIterable(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsIterableTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsIterableTest::testFailure
Failed asserting that null is of type iterable.

/path/to/tests/IsIterableTest.php:8

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

assertIsNumeric()

assertIsNumeric(mixed $actual[, string $message])

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

assertIsNotNumeric() является обратным этому утверждению и принимает те же аргументы.

Пример 1.53 Использование assertIsNumeric()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsNumericTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsNumeric(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsNumericTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsNumericTest::testFailure
Failed asserting that null is of type numeric.

/path/to/tests/IsNumericTest.php:8

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

assertIsObject()

assertIsObject(mixed $actual[, string $message])

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

assertIsNotObject() является обратным этому утверждению и принимает те же аргументы.

Пример 1.54 Использование assertIsObject()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsObjectTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsObject(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsObjectTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsObjectTest::testFailure
Failed asserting that null is of type object.

/path/to/tests/IsObjectTest.php:8

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

assertIsResource()

assertIsResource(mixed $actual[, string $message])

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

assertIsNotResource() является обратным этому утверждению и принимает те же аргументы.

assertIsClosedResource() (и assertIsNotClosedResource()) предоставляются для явной проверки закрытых ресурсов.

Пример 1.55 Использование assertIsResource()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsResourceTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsResource(null);
    }
}

Выполнение приведенного выше теста дает следующий результат:

./tools/phpunit tests/IsResourceTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsResourceTest::testFailure
Failed asserting that null is of type resource.

/path/to/tests/IsResourceTest.php:8

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

assertIsScalar()

assertIsScalar(mixed $actual[, string $message])

Сообщает об ошибке, идентифицированной $message, если $actual не является типом scalar.

assertIsNotScalar() — это обратная проверка, принимающая те же аргументы.

Пример 1.56 Использование assertIsScalar()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsScalarTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsScalar(null);
    }
}

Запуск представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/IsScalarTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsScalarTest::testFailure
Failed asserting that null is of type scalar.

/path/to/tests/IsScalarTest.php:8

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

assertIsString()

assertIsString(mixed $actual[, string $message])

Сообщает об ошибке, идентифицированной $message, если $actual не является типом string.

assertIsNotString() — это обратная проверка, принимающая те же аргументы.

Пример 1.57 Использование assertIsString()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsStringTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsString(null);
    }
}

Запуск представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/IsStringTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) IsStringTest::testFailure
Failed asserting that null is of type string.

/path/to/tests/IsStringTest.php:8

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

assertNull()

assertNull(mixed $actual[, string $message])

Сообщает об ошибке, идентифицированной $message, если $actual не равно null.

assertNotNull() — это обратная проверка, принимающая те же аргументы.

Пример 1.58 Использование assertNull()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class NullTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertNull('foo');
    }
}

Запуск представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/NullTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/NullTest.php:8

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

Строки

assertStringStartsWith()

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

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

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

Пример 1.59 Использование assertStringStartsWith()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class StringStartsWithTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertStringStartsWith('prefix', 'foo');
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/StringStartsWithTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/StringStartsWithTest.php:8

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

assertStringEndsWith()

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

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

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

Пример 1.60 Использование assertStringEndsWith()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class StringEndsWithTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertStringEndsWith('suffix', 'foo');
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/StringEndsWithTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/StringEndsWithTest.php:8

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

assertStringContainsString()

assertStringContainsString(string $needle, string $haystack[, string $message])

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

assertStringNotContainsString() — это обратное утверждение и принимает те же аргументы.

assertStringContainsStringIgnoringLineEndings() принимает те же аргументы и может быть использовано, если необходимо игнорировать окончания строк.

Пример 1.61 Использование assertStringContainsString()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class StringContainsStringTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertStringContainsString('foo', 'bar');
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/StringContainsStringTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) StringContainsStringTest::testFailure
Failed asserting that 'bar' [ASCII](length: 3) contains "foo" [ASCII](length: 3).

/path/to/tests/StringContainsStringTest.php:8

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

assertStringContainsStringIgnoringCase()

assertStringContainsStringIgnoringCase(string $needle, string $haystack[, string $message])

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

Различия в регистре игнорируются при поиске $needle в $haystack. Это также работает для символов Юникода с диакритическими знаками (ударения, умлауты, циркумфлекс и т. д.), если обе строки имеют одинаковую форму нормализации.

assertStringNotContainsStringIgnoringCase() — это обратное утверждение и принимает те же аргументы.

Пример 1.62 Использование assertStringContainsStringIgnoringCase()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class StringContainsStringIgnoringCaseTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertStringContainsStringIgnoringCase('foo', 'bar');
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/StringContainsStringIgnoringCaseTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) StringContainsStringIgnoringCaseTest::testFailure
Failed asserting that 'bar' [Encoding ignored](length: 3) contains "foo" [Encoding ignored](length: 3).

/path/to/tests/StringContainsStringIgnoringCaseTest.php:8

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

assertStringEqualsStringIgnoringLineEndings()

assertStringEqualsStringIgnoringLineEndings(string $expected, string $actual[, string $message])

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

assertMatchesRegularExpression()

assertMatchesRegularExpression(string $pattern, string $string[, string $message])

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

assertDoesNotMatchRegularExpression() — это обратное утверждение и принимает те же аргументы.

Пример 1.63 Использование assertMatchesRegularExpression()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class MatchesRegularExpressionTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertMatchesRegularExpression('/foo/', 'bar');
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/MatchesRegularExpressionTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/MatchesRegularExpressionTest.php:8

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

assertStringMatchesFormat()

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

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

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

Пример 1.64 Использование assertStringMatchesFormat()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class StringMatchesFormatTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertStringMatchesFormat('%i', 'foo');
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/StringMatchesFormatTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) StringMatchesFormatTest::testFailure
Failed asserting that string matches format description.
--- Expected
+++ Actual
@@ @@
-%i
+foo

/path/to/tests/StringMatchesFormatTest.php:8

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

Строка формата может содержать следующие плейсхолдеры:

  • %e: Представляет разделитель каталога, например / в Linux.

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

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

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

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

  • %w: Ноль или более символов пробела.

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

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

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

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

  • %c: Один произвольный символ.

  • %%: Буквальный символ процента: %.

Устаревание: assertStringNotMatchesFormat() устарел

Начиная с PHPUnit 10.4, метод assertStringNotMatchesFormat() мягко устарел, то есть его объявление снабжено @deprecated, чтобы IDE и инструменты статического анализа могли предупреждать об использовании.

Начиная с PHPUnit 11, использование метода assertStringNotMatchesFormat() будет вызывать предупреждение об устаревании. Метод будет удален в PHPUnit 12.

assertStringMatchesFormatFile()

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

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

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

Пример 1.65 Использование assertStringMatchesFormatFile()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class StringMatchesFormatFileTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertStringMatchesFormatFile(
            __DIR__ . '/expected-format.txt',
            'foo',
        );
    }
}

Выполнение показанного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/StringMatchesFormatFileTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) StringMatchesFormatFileTest::testFailure
Failed asserting that string matches format description.
--- Expected
+++ Actual
@@ @@
-%i
+foo

/path/to/tests/StringMatchesFormatFileTest.php:8

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

Устаревание: assertStringNotMatchesFormatFile() устарел

Начиная с PHPUnit 10.4, метод assertStringNotMatchesFormatFile() мягко устарел, то есть его объявление снабжено @deprecated, чтобы IDE и инструменты статического анализа могли предупреждать об использовании.

Начиная с PHPUnit 11, использование метода assertStringNotMatchesFormatFile() будет вызывать предупреждение об устаревании. Метод будет удален в PHPUnit 12.

assertFileMatchesFormat()

assertFileMatchesFormat(string $format, string $actualFile[, string $message])

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

assertFileMatchesFormatFile()

assertFileMatchesFormat(string $formatFile, string $actualFile[, string $message])

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

assertStringEqualsFile()

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

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

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

assertStringEqualsFileCanonicalizing() (и assertStringNotEqualsFileCanonicalizing()), а также assertStringEqualsFileIgnoringCase() (и assertStringNotEqualsFileIgnoringCase()) работают с файлами так же, как assertEqualsCanonicalizing() (и assertNotEqualsCanonicalizing()), а также assertEqualsIgnoringCase() (и assertNotEqualsIgnoringCase()) работают со строками.

Пример 1.66 Использование assertStringEqualsFile()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class StringEqualsFileTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertStringEqualsFile(
            __DIR__ . '/expected.txt',
            'actual',
        );
    }
}

Запуск представленного выше теста даёт следующий результат:

./tools/phpunit tests/StringEqualsFileTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/StringEqualsFileTest.php:8

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

JSON

assertJson()

assertJson(string $actual[, string $message])

Сообщает об ошибке, идентифицированной $message, если значение $actual не является валидным JSON.

Пример 1.67 Использование assertJson()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class JsonTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertJson('not-a-json-string');
    }
}

Запуск представленного выше теста даёт следующий результат:

./tools/phpunit tests/JsonTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) JsonTest::testFailure
Failed asserting that a string is valid JSON (Syntax error, malformed JSON).

/path/to/tests/JsonTest.php:8

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

assertJsonFileEqualsJsonFile()

assertJsonFileEqualsJsonFile(string $expectedFile, string $actualFile[, string $message])

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

assertJsonFileNotEqualsJsonFile() — это обратное утверждение с теми же аргументами.

Пример 1.68 Использование assertJsonFileEqualsJsonFile()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class JsonFileEqualsJsonFileTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertJsonFileEqualsJsonFile(
            __DIR__ . '/expected.json',
            __DIR__ . '/actual.json',
        );
    }
}

Запуск представленного выше теста даёт следующий результат:

./tools/phpunit tests/JsonFileEqualsJsonFileTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) JsonFileEqualsJsonFileTest::testFailure
Failed asserting that '{"mascot":"elePHPant"}\n
' matches JSON string "{"mascot":"elephant"}
".
--- Expected
+++ Actual
@@ @@
 {
-    "mascot": "elephant"
+    "mascot": "elePHPant"
 }

/path/to/tests/JsonFileEqualsJsonFileTest.php:8

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

assertJsonStringEqualsJsonFile()

assertJsonStringEqualsJsonFile(string $expectedFile, string $actualJson[, string $message])

Сообщает об ошибке, идентифицированной $message, если значение $actualJson не совпадает со значением $expectedFile.

assertJsonStringNotEqualsJsonFile() — это обратное утверждение с теми же аргументами.

Пример 1.69 Использование assertJsonStringEqualsJsonFile()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class JsonStringEqualsJsonFileTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertJsonStringEqualsJsonFile(
            __DIR__ . '/expected.json',
            json_encode(['mascot' => 'elephant']),
        );
    }
}

Запуск представленного выше теста даёт следующий результат:

./tools/phpunit tests/JsonStringEqualsJsonFileTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) JsonStringEqualsJsonFileTest::testFailure
Failed asserting that '{"mascot":"elephant"}' matches JSON string "{"mascot":"elePHPant"}
".
--- Expected
+++ Actual
@@ @@
 {
-    "mascot": "elePHPant"
+    "mascot": "elephant"
 }

/path/to/tests/JsonStringEqualsJsonFileTest.php:8

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

assertJsonStringEqualsJsonString()

assertJsonStringEqualsJsonString(string $expectedJson, string $actualJson[, string $message])

Сообщает об ошибке, идентифицированной $message, если значение $actualJson не совпадает со значением $expectedJson.

assertJsonStringNotEqualsJsonString() — это обратное утверждение с теми же аргументами.

Пример 1.70 Использование assertJsonStringEqualsJsonString()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class JsonStringEqualsJsonStringTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertJsonStringEqualsJsonString(
            json_encode(['mascot' => 'elePHPant']),
            json_encode(['mascot' => 'elephant']),
        );
    }
}

Запуск представленного выше теста даёт следующий результат:

./tools/phpunit tests/JsonStringEqualsJsonStringTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) JsonStringEqualsJsonStringTest::testFailure
Failed asserting that '{"mascot":"elephant"}' matches JSON string "{"mascot":"elePHPant"}".
--- Expected
+++ Actual
@@ @@
 {
-    "mascot": "elePHPant"
+    "mascot": "elephant"
 }

/path/to/tests/JsonStringEqualsJsonStringTest.php:8

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

XML

assertXmlFileEqualsXmlFile()

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

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

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

Пример 1.71 Использование assertXmlFileEqualsXmlFile()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class XmlFileEqualsXmlFileTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertXmlFileEqualsXmlFile(
            __DIR__ . '/expected.xml',
            __DIR__ . '/actual.xml',
        );
    }
}

Запуск представленного выше теста даёт следующий результат:

./tools/phpunit tests/XmlFileEqualsXmlFileTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

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>

/path/to/tests/XmlFileEqualsXmlFileTest.php:8

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

assertXmlStringEqualsXmlFile()

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

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

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

Пример 1.72 Использование assertXmlStringEqualsXmlFile()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class XmlStringEqualsXmlFileTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertXmlStringEqualsXmlFile(
            __DIR__ . '/expected.xml',
            '<foo><baz/></foo>',
        );
    }
}

Запуск представленного выше теста даёт следующий результат:

./tools/phpunit tests/XmlStringEqualsXmlFileTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

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>

/path/to/tests/XmlStringEqualsXmlFileTest.php:8

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

assertXmlStringEqualsXmlString()

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

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

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

Пример 1.73 Использование assertXmlStringEqualsXmlString()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class XmlStringEqualsXmlStringTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertXmlStringEqualsXmlString(
            '<foo><bar/></foo>',
            '<foo><baz/></foo>',
        );
    }
}

Запуск представленного выше теста даёт следующий результат:

./tools/phpunit tests/XmlStringEqualsXmlStringTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

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>

/path/to/tests/XmlStringEqualsXmlStringTest.php:8

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

Система файлов

assertDirectoryExists()

assertDirectoryExists(string $directory[, string $message])

Сообщает об ошибке, определённой $message, если указанный каталог $directory не существует.

assertDirectoryDoesNotExist() — обратная проверка с теми же аргументами.

Пример 1.74 Использование assertDirectoryExists()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class DirectoryExistsTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertDirectoryExists('/path/to/directory');
    }
}

Выполнение представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/DirectoryExistsTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) DirectoryExistsTest::testFailure
Failed asserting that directory "/path/to/directory" exists.

/path/to/tests/DirectoryExistsTest.php:8

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

assertDirectoryIsReadable()

assertDirectoryIsReadable(string $directory[, string $message])

Сообщает об ошибке, определённой $message, если указанный каталог $directory не является каталогом или недоступен для чтения.

assertDirectoryIsNotReadable() — обратная проверка с теми же аргументами.

Пример 1.75 Использование assertDirectoryIsReadable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class DirectoryIsReadableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertDirectoryIsReadable('/path/to/directory');
    }
}

Выполнение представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/DirectoryIsReadableTest.php
PHPUnit 10.0.11 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.2.3

F

Time: 00:00, Memory: 14.29 MB

There was 1 failure:

1) DirectoryIsReadableTest::testFailure
Failed asserting that "/path/to/directory" is readable.

/path/to/DirectoryIsReadableTest.php:6

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

assertDirectoryIsWritable()

assertDirectoryIsWritable(string $directory[, string $message])

Сообщает об ошибке, определённой $message, если указанный каталог $directory не является каталогом или недоступен для записи.

assertDirectoryIsNotWritable() — обратная проверка с теми же аргументами.

Пример 1.76 Использование assertDirectoryIsWritable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class DirectoryIsReadableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertDirectoryIsReadable('/path/to/directory');
    }
}

Выполнение представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/DirectoryIsWritableTest.php
PHPUnit 10.0.11 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.2.3

F

Time: 00:00, Memory: 14.29 MB

There was 1 failure:

1) DirectoryIsWritableTest::testFailure
Failed asserting that "/path/to/directory" is writable.

/path/to/DirectoryIsWritableTest.php:6

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

assertFileExists()

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

Сообщает об ошибке, определённой $message, если указанный файл $filename не существует.

assertFileDoesNotExist() — обратная проверка с теми же аргументами.

Пример 1.77 Использование assertFileExists()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class FileExistsTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertFileExists('/path/to/file');
    }
}

Выполнение представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/FileExistsTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

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

/path/to/tests/FileExistsTest.php:8

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

assertFileIsReadable()

assertFileIsReadable(string $filename[, string $message])

Сообщает об ошибке, определённой $message, если указанный файл $filename не является файлом или недоступен для чтения.

assertFileIsNotReadable() — обратная проверка с теми же аргументами.

Пример 1.78 Использование assertFileIsReadable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class FileIsReadableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertFileIsReadable('/path/to/file');
    }
}

Выполнение представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/FileIsReadableTest.php
PHPUnit 10.0.11 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.2.3

F

Time: 00:00, Memory: 14.29 MB

There was 1 failure:

1) FileIsReadableTest::testFailure
Failed asserting that "/path/to/file" is readable.

/path/to/FileIsReadableTest.php:6

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

assertFileIsWritable()

assertFileIsWritable(string $filename[, string $message])

Сообщает об ошибке, определённой $message, если указанный файл $filename не является файлом или недоступен для записи.

assertFileIsNotWritable() — обратная проверка с теми же аргументами.

Пример 1.79 Использование assertFileIsWritable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class FileIsWritableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertFileIsWritable('/path/to/file');
    }
}

Выполнение представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/FileIsWritableTest.php
PHPUnit 10.0.11 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.2.3

F

Time: 00:00, Memory: 14.29 MB

There was 1 failure:

1) FileIsWritableTest::testFailure
Failed asserting that "/path/to/file" is writable.

/path/to/FileIsWritableTest.php:6

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

assertIsReadable()

assertIsReadable(string $filename[, string $message])

Сообщает об ошибке, определённой $message, если файл или каталог, указанный в $filename, недоступен для чтения.

assertIsNotReadable() — обратная проверка с теми же аргументами.

Пример 1.80 Использование assertIsReadable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsReadableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsReadable('/path/to/unreadable');
    }
}

Выполнение представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/IsReadableTest.php
PHPUnit 10.0.11 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.2.3

F

Time: 00:00, Memory: 14.29 MB

There was 1 failure:

1) IsReadableTest::testFailure
Failed asserting that "/path/to/unreadable" is readable.

/path/to/IsReadableTest.php:6

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

assertIsWritable()

assertIsWritable(string $filename[, string $message])

Сообщает об ошибке, определённой $message, если файл или каталог, указанный в $filename, недоступен для записи.

assertIsNotWritable() — обратная проверка с теми же аргументами.

Пример 1.81 Использование assertIsWritable()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class IsWritableTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertIsWritable('/path/to/unwritable');
    }
}

Выполнение представленного выше теста приводит к выводу, показанному ниже:

./tools/phpunit tests/IsWritableTest.php
PHPUnit 10.0.11 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.2.3

F

Time: 00:00, Memory: 14.29 MB

There was 1 failure:

1) IsWritableTest::testFailure
Failed asserting that "/path/to/unwritable" is writable.

/path/to/IsWritableTest.php:6

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

Математика

assertInfinite()

assertInfinite(mixed $actual[, string $message])

Сообщает об ошибке, определённой $message, если $actual не является INF.

assertFinite() — обратное утверждение, принимающее те же аргументы.

Пример 1.82 Использование assertInfinite()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class InfiniteTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertInfinite(1);
    }
}

Запуск показанного выше теста даёт следующий результат:

./tools/phpunit tests/InfiniteTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) InfiniteTest::testFailure
Failed asserting that 1 is infinite.

/path/to/tests/InfiniteTest.php:8

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

assertNan()

assertNan(mixed $actual[, string $message])

Сообщает об ошибке, определённой $message, если $actual не является NAN.

Пример 1.83 Использование assertNan()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class NanTest extends TestCase
{
    public function testFailure(): void
    {
        $this->assertNan(1);
    }
}

Запуск показанного выше теста даёт следующий результат:

./tools/phpunit tests/NanTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) NanTest::testFailure
Failed asserting that 1 is nan.

/path/to/tests/NanTest.php:8

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

Ограничения

assertThat()

assertThat(mixed $value, PHPUnit\Framework\Constraint $constraint[, string $message])

Сообщает об ошибке, определённой $message, если $value не соответствует $constraint.

Более сложные утверждения можно сформулировать, используя классы PHPUnit\Framework\Constraint. Они могут быть оценены с помощью метода assertThat().

Этот пример демонстрирует, как можно использовать ограничения logicalNot() и equalTo(), чтобы выразить то же утверждение, что и assertNotEquals():

Пример 1.84 Использование assertThat()
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;

final class BiscuitTest extends TestCase
{
    public function testEquals(): void
    {
        $theBiscuit = new Biscuit('Ginger');
        $myBiscuit  = new Biscuit('Ginger');

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

Выполнение показанного выше теста даёт результат, показанный ниже:

./tools/phpunit tests/BiscuitTest.php
PHPUnit 12.0.2 by Sebastian Bergmann and contributors.

Runtime:       PHP 8.4.3

F                                                                   1 / 1 (100%)

Time: 00:00, Memory: 25.29 MB

There was 1 failure:

1) BiscuitTest::testEquals
Failed asserting that Biscuit Object #360 (
    'name' => 'Ginger',
) is equal to Biscuit Object #377 (
    'name' => 'Ginger',
).

/path/to/tests/BiscuitTest.php:11

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

Таблица 1.1 показывает доступные классы PHPUnit\Framework\Constraint.

Таблица 1.1 Ограничения

Ограничение

Значение

PHPUnit\Framework\Constraint\IsAnything anything()

Ограничение, которое принимает любое входное значение.

PHPUnit\Framework\Constraint\ArrayHasKey arrayHasKey(mixed $key)

Ограничение, которое утверждает, что массив имеет заданный ключ.

PHPUnit\Framework\Constraint\TraversableContains contains(mixed $value)

Ограничение, которое утверждает, что массив или объект, реализующий интерфейс Iterator, содержит заданное значение.

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\DirectoryExists directoryExists()

Ограничение, которое проверяет, существует ли каталог.

PHPUnit\Framework\Constraint\FileExists fileExists()

Ограничение, которое проверяет, существует ли файл.

PHPUnit\Framework\Constraint\IsReadable isReadable()

Ограничение, которое проверяет, доступен ли файл для чтения.

PHPUnit\Framework\Constraint\IsWritable isWritable()

Ограничение, которое проверяет, доступен ли файл для записи.

PHPUnit\Framework\Constraint\GreaterThan greaterThan(mixed $value)

Ограничение, которое утверждает, что значение больше заданного значения.

PHPUnit\Framework\Constraint\LogicalOr greaterThanOrEqual(mixed $value)

Ограничение, которое утверждает, что значение больше или равно заданному значению.

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)

Ограничение, которое утверждает, что значение меньше заданного значения.

PHPUnit\Framework\Constraint\LogicalOr lessThanOrEqual(mixed $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)

Ограничение, которое утверждает, что строка начинается с заданного префикса.

© 2005–2025 Sebastian Bergmann
Licensed under the Creative Commons Attribution 3.0 Unported License.
https://docs.phpunit.de/en/12.0/assertions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API