Я работаю над проектом PHP, который требует проверки JSON-запроса к предопределенной схеме, которая доступна в swagger. Теперь я провел исследование и обнаружил, что лучший проект для этого — SwaggerAssertions:
https://github.com/Maks3w/SwaggerAssertions
В SwaggerAssertions / tests / PhpUnit / AssertsTraitTest.php я хотел бы использовать метод testAssertRequestBodyMatch, где вы делаете это:
self::assertRequestBodyMatch($request, $this->schemaManager, '/api/pets', 'post');
Это утверждение выше делает именно то, что мне нужно, но если я передам неверный запрос, это приведет к фатальной ошибке. Я хочу перехватить это и обработать ответ, а не завершить приложение.
Как я могу использовать этот проект, даже если он выглядит как все для PHPUnit? Я не слишком уверен, как можно было бы использовать этот проект в обычном производственном коде PHP. Любая помощь будет принята с благодарностью.
Утверждения генерируют исключения, если условие не выполняется. Если выдается исключение, он останавливает выполнение всего следующего кода, пока не будет перехвачен в try catch
блок. Невыполненные исключения вызовут фатальную ошибку, и программа закроется.
Все, что вам нужно сделать, чтобы предотвратить сбой вашего приложения, это обработать исключение:
try {
self::assertRequestBodyMatch($request, $this->schemaManager, '/api/pets', 'post');
// Anything here will only be executed if the assertion passed
} catch (\Exception $e) {
// This will be executed if the assertion,
// or any other statement in the try block failed
// You should check the exception and handle it accordingly
if ($e instanceof \PHPUnit_Framework_ExpectationFailedException) {
// Do something if the assertion failed
}
// If you don't recognise the exception, re-throw it
throw $e;
}
Надеюсь это поможет.
Других решений пока нет …