2016-05-18 3 views
2

Я работаю над проектом PHP, который требует проверки запроса JSON на предопределенную схему, доступную в swagger. Теперь я сделал свое исследование и обнаружили, что лучший проект для этого SwaggerAssertions:Проект PHPUnit Assertions

https://github.com/Maks3w/SwaggerAssertions

В SwaggerAssertions/тесты/PHPUnit/AssertsTraitTest.php, я хотел бы, чтобы использовать метод testAssertRequestBodyMatch, где вы делаете это:

self::assertRequestBodyMatch($request, $this->schemaManager, '/api/pets', 'post'); 

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

Как я могу использовать этот проект, хотя он выглядит как его все для PHPUnit? Я не слишком уверен, как можно использовать этот проект в нормальном PHP-коде. Любая помощь будет принята с благодарностью.

+0

Пройдите проект и изучите, как работает класс 'SchemaManager'. Измените его так, чтобы он работал так, как вам нужно. – gontrollez

ответ

1

Утверждения исключают исключения, если условие не выполняется. Если выбрано исключение, он прекратит выполнение всего следующего кода до тех пор, пока он не окажется в блоке 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; 
} 

Надеется, что это помогает.

+0

Спасибо за это. Ваше сообщение заставило меня понять, что я делаю неправильно. Я делал это в блоке catch: catch Exception $ e). Заметьте, у меня не было обратной косой черты перед этим. – user3669334