Выполнение произвольных утверждений для сгенерированного исключения может быть полезно, когда оно обрабатывает другую информацию, кроме сообщения или кода.
Есть ли более простой, читаемый или более «рекомендуемый phpunit способ» сделать это, чем в следующем примере:
public function testTitleShouldNotAcceptArrayAsValue()
{
/* Arrange */
$schema = new sch\ObjectSchema();/* Expect */
$this->expectException(sch\Exception::class);try {
/* Act */
$schema->title = [];
} catch (sch\Exception $exception) {
/* Assert */
$this->assertEquals('title', $exception->getProperty());
$this->assertEquals(
[
'properties' => [
'title' => [
'type' => 'string'
]
]
],
$exception->getRules()
);
throw $exception;
}
}
Если вы помещаете дополнительную информацию в объект исключения и хотите в тесте доказать, что он устанавливается, я бы использовал команду try / catch, как у вас.
ИМО, expectException()
и повторноthrow
избыточно, хотя. В конце перехвата я просто возвращаюсь из функции с пропуском, а после сбоя блока перехвата (с $this->fail('sch\Exception was not thrown');
) так как не было исключения, чтобы поймать, как было запланировано.
Было бы совершенно очевидно, что это происходит — и ясность в большинстве случаев более полезна, чем элегантность.
Других решений пока нет …