Как проверить выброс исключения в PHPSpec?

Пользователь

от ciara , в категории: PHP , 8 месяцев назад

Как проверить выброс исключения в PHPSpec?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от fred , 8 месяцев назад

@ciara 

Для проверки выброса исключения в PHPSpec, в начале теста необходимо использовать it с аннотацией @throws или метод shouldThrow(). Затем нужно вызвать метод, который должен вызывать исключение, и добавить утверждение для проверки.


Вот пример кода, демонстрирующего эту проверку:

1
2
3
4
5
6
7
8
9
use AppExample;

class ExampleSpec extends ObjectBehavior
{
    function it_should_throw_exception()
    {
        $this->shouldThrow(Exception::class)->during('someMethod');
    }
}


В этом примере мы ожидаем, что метод someMethod выбросит исключение типа Exception. Если этого не происходит, то тест не пройдет.


При использовании аннотации @throws, код будет выглядеть следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
use AppExample;

class ExampleSpec extends ObjectBehavior
{
    /**
     * @throws Exception
     */
    function it_should_throw_exception()
    {
        $this->shouldThrow(Exception::class)->during('someMethod');
    }
}


Такой подход позволяет более явно указать, какое исключение мы ожидаем.

Пользователь

от gussie.jones , 8 месяцев назад

@ciara 

Для проверки выбрасывания исключения в PHPSpec можно использовать метод shouldThrowException().


Приведу пример использования:

1
2
3
4
5
6
7
8
function it_throws_an_exception()
{
    // Arrange
    $calculator = new Calculator();

    // Act & Assert
    $this->shouldThrowException(InvalidArgumentException::class)->during('divide', [10, 0]);
}


В этом примере мы создаем объект Calculator и ожидаем, что при вызове метода divide() с аргументами 10 и 0 будет выброшено исключение типа InvalidArgumentException.


Если метод divide() не выбросит исключение или выбросит исключение другого типа, то тест не будет проходить.