PHPUnit - неверный аргумент для foreach () не распознан, несмотря на его ожидание - PullRequest
0 голосов
/ 03 октября 2019

все ... моя тема говорит само за себя. Я пытаюсь сделать тест, который на самом деле преднамеренно заставляет"Неверный аргумент, предоставленный для foreach ()", произойти. Я пытаюсь заставить PHPUnit ожидать этого, но ... Нет, мои тесты все еще падают. Причина: «неверный аргумент передан для foreach ()» прямо в тот момент, когда я говорю ему , что это произойдет.

В верхней части моего файла у меня есть:

use PHPUnit\Framework\TestCase;
use PHPUnit\Framework\Error\Error;
use PHPUnit\Framework\Error\Notice;
use PHPUnit\Framework\Error\Warning;

Объявление моего класса начинается с:

Class flirzelkwerpTest extends TestCase {

Вот строки в тестовом файле:

    // Let's try to add nothing.
    // (It should throw an error because of "Invalid argument supplied for foreach()" in barabajagal.php.)
    $this->expectException(\InvalidArgumentException::class);
    $this->expectExceptionMessage('Invalid argument supplied for foreach()');
    $resp = $barabajagal->add();

Ошибка возникает в этой последней строке. Если предыдущие две строки не говорили PHPUnit: «Эй, буб, я ожидаю, что здесь будет ошибка, и это сообщение, которое вы должны получить дословно» ??

Мы используем PHP 7.3.4 и PHPUnit 8.3.2.

1 Ответ

3 голосов
/ 03 октября 2019

Когда Тестирование ошибок PHP , необходимо помнить о трех моментах: 1) убедиться, что PHPUnit преобразует ошибки PHP, предупреждения и уведомления в исключения, 1) убедиться, что отчеты об ошибках PHP установлены правильно, и 3) используйте исключения, которые PHPUnit преобразует в ошибки, предупреждения и уведомления.

1) убедитесь, что PHPUnit преобразует ошибки, предупреждения и уведомления

По умолчанию PHPUnit преобразует ошибки PHP, предупреждения и уведомления, которые срабатывают во время выполнения теста для исключения. Используя эти исключения, можно, например, ожидать, что тест вызовет ошибку PHP, как показано в примере 2.12.

- Проверка ошибок PHP

2) Убедитесь, что в отчете об ошибках PHP установлено

PHP error_reporting Конфигурация времени выполнения может ограничивать количество ошибок, которые PHPUnit преобразует в исключения. Если у вас есть проблемы с этой функцией, убедитесь, что PHP не настроен на подавление типа ошибок, которые вы тестируете.

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

3) Используйте преобразованные исключения, предоставляемые PHPUnit

<?php

namespace Sandbox\Stackoverflow;

use PHPUnit\Framework\Error\Warning;

class Q58222995Test extends \PHPUnit\Framework\TestCase
{
    public function testForeachWarning()
    {
        $this->expectException(Warning::class);
        $this->expectExceptionMessage('Invalid argument supplied for foreach()');

        $collection = null;
        foreach ($collection as $value) {}
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...