2016-05-18 10 views
2

Ich arbeite an einem PHP-Projekt, das die Validierung einer JSON-Anfrage an ein vordefiniertes Schema erfordert, das in swagger verfügbar ist. Jetzt habe ich meine Forschung getan und haben festgestellt, dass das beste Projekt für diese SwaggerAssertions ist:PHPUnit Assertions-Projekt

https://github.com/Maks3w/SwaggerAssertions

Innerhalb SwaggerAssertions/Tests/PHPUnit/AssertsTraitTest.php, ich liebe würde die Verwendung des testAssertRequestBodyMatch Verfahren zu machen, wo Sie tun dies:

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

diese Behauptung über genau das tut, was ich brauche, aber wenn ich eine ungültige Anforderung passieren, verursacht dies einen fatalen Fehler. Ich möchte dies abfangen und die Antwort zurücknehmen, anstatt die App ganz aufzugeben.

Wie kann ich dieses Projekt nutzen, obwohl es wie für PHPUnit aussieht? Ich bin mir nicht sicher, wie man dieses Projekt in normalem PHP-Produktionscode nutzen würde. Jede Hilfe würde sehr geschätzt werden.

+0

Fork das Projekt und studieren, wie die 'SchemaManager' Klasse funktioniert. Ändern Sie es so, dass es so funktioniert, wie Sie es brauchen. – gontrollez

Antwort

1

Zusicherungen werfen Ausnahmen, wenn die Bedingung nicht erfüllt ist. Wenn eine Ausnahme ausgelöst wird, wird der gesamte folgende Code gestoppt, bis er in einem try catch-Block gefangen wird. Nicht erfasste Ausnahmen führen zu einem schwerwiegenden Fehler und das Programm wird beendet.

Alles, was Sie tun müssen, um Ihre App vor einem Absturz zu verhindern, ist der Umgang mit der Ausnahme:

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; 
} 

Hoffnung, das hilft.

+0

Danke dafür. Ihr Beitrag hat mir klar gemacht, was ich falsch gemacht habe. Ich habe das im Catch-Block gemacht: fang Exception $ e). Hinweis, ich hatte keinen Backslash davor. – user3669334