einen Komponententest schreiben einen Controller zu schlagen, ist der Code für den Controller:Wie kann ich testen, ob eine HttpResponseMessage eine ErrorResponse ist?
public HttpResponseMessage InsertByKittyId(.....
...
if (result.Success)
return Request.CreateResponse(HttpStatusCode.OK);
else
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, new Exception(result.Message));
In meiner Einheit Test sollte es eine Fehlermeldung mit dem Code generieren:
var response = kittenController.InsertByKittenId(123);
Assert that response is an Error Response ?
var exceptionResult = (Error Response)response; ?
Assert.AreEqual("Bad Kitty", exceptionResult.Exception.Message);
Gibt es eine Möglichkeit um die zwei Zeilen mit einem? zu schreiben, oder sollte ich überprüfen, ob der Antwortcode nicht 2xx ist und den Fehleraspekt vollständig ignorieren? Wenn das der Fall ist, muss ich einen Weg finden, die Ausnahme zu entfernen.
Edit:
Ich frage mich, ob es einen Weg zwischen CreateResponse und CreateErrorResponse eher an der Fehlercode als die Suche zu unterscheiden ist, weil in einigen Fällen ich eine Ausnahme anhängen möchten und in einigen Fällen ist es nicht ein "Fehler" an sich.
Sonst könnte ich nur Request.CreateResponse(HttpStatusCode.InternalServerError);
aber vielleicht gibt es keinen Unterschied?
Es sollte eine "IsSuccess" -Eigenschaft sein, nein? –
Es gibt, aber ich denke, in einigen Situationen wird es keine Ausnahme geben? Zum Beispiel garantiert 404 keine Ausnahme oder einen Fehler. – NibblyPig
Nun, das hängt davon ab, was außergewöhnliche Umstände sind und was Sie in sie aufnehmen. Sie stellen entweder eine '200' oder eine' 500' ein, also warum behaupten Sie nicht einfach, dass diese existieren. Ist es wirklich wichtig, dass die Ausnahme in Ihrem Test bestätigt wird? Ich erwarte, dass Sie Ihre 500-Ausnahme nicht in die Client-App (Browser oder App) einbinden lassen. Sie sind nur für den internen Gebrauch, also würde ich erwarten, dass einige Middleware diese herausziehen und keine Nachricht geben. (was ich tue) –