PHPUnit: как утверждать сообщения об исключениях в ваших тестах

В PHPUnit, популярной среде тестирования PHP, крайне важно убедиться, что ваш код генерирует правильные исключения с соответствующими сообщениями об ошибках. Это помогает убедиться, что ваше приложение ведет себя должным образом, и предоставляет разработчикам содержательную обратную связь. В этой статье мы рассмотрим различные методы утверждения сообщений об исключениях в PHPUnit, сопровождаемые примерами кода.

  1. Использование метода expectExceptionMessage():
    Метод expectExceptionMessage()специально разработан для подтверждения точного сообщения об исключении, выдаваемого фрагментом кода. Вот пример:
public function testExceptionMessage()
{
    $this->expectException(\InvalidArgumentException::class);
    $this->expectExceptionMessage("Invalid argument provided.");
    // Code that is expected to throw an exception
    // ...
}
  1. Использование метода expectExceptionMessageMatches():
    Если вам нужно убедиться, что сообщение об исключении соответствует определенному шаблону или регулярному выражению, вы можете использовать метод expectExceptionMessageMatches()метод. Вот пример:
public function testExceptionMessageMatches()
{
    $this->expectException(\InvalidArgumentException::class);
    $this->expectExceptionMessageMatches('/^Invalid argument/');
    // Code that is expected to throw an exception
    // ...
}
  1. Использование метода expectExceptionMessageContains():
    Чтобы проверить, содержит ли сообщение об исключении определенную строку, вы можете использовать метод expectExceptionMessageContains(). Вот пример:
public function testExceptionMessageContains()
{
    $this->expectException(\InvalidArgumentException::class);
    $this->expectExceptionMessageContains("Invalid argument");
    // Code that is expected to throw an exception
    // ...
}
  1. Использование аннотации @expectedExceptionMessage:
    В более ранних версиях PHPUnit вы могли использовать аннотацию @expectedExceptionMessageдля подтверждения сообщения об исключении. Хотя этот подход устарел, его стоит упомянуть для обеспечения обратной совместимости. Вот пример:
/
 * @expectedException \InvalidArgumentException
 * @expectedExceptionMessage Invalid argument provided.
 */
public function testDeprecatedAnnotation()
{
    // Code that is expected to throw an exception
    // ...
}

PHPUnit предоставляет несколько методов для утверждения сообщений об исключениях, что позволяет вам тщательно протестировать возможности обработки ошибок вашего кода. Используя такие методы, как expectExceptionMessage(), expectExceptionMessageMatches()и expectExceptionMessageContains(), вы можете быть уверены, что ваши исключения обеспечивают содержательную обратную связь. Не забудьте адаптировать свой подход с учетом конкретных требований ваших тестовых примеров.

Понимая и применяя эти методы, вы можете повысить надежность и качество своих PHP-приложений.

Не забудьте включить эти рекомендации по обработке исключений в ваши тесты PHPUnit для создания надежных и удобных в обслуживании кодовых баз.