Ich habe versucht, einige Komponententests für eine Web-API-Aktion-Methode während der Ausnahme zu schreiben. So unter meiner AktionsmethodeUnit-Test für Web-API-Aktion Methode reagiert während Ausnahme
[Route("{userName}/{searchCriteria}")]
[HttpGet]
public IHttpActionResult Events(string accountNumber, string searchCriteria)
{
try
{
bool isInputValid = _inputValidation.IsTrackingEventInputValid(accountNumber, searchCriteria);
if (isInputValid)
{
return OK ("my data");
}
else
{
throw new ArgumentException();
}
}
catch (ArgumentException ae)
{
return new ResponseMessageResult(Request.CreateErrorResponse(HttpStatusCode.BadRequest, ExceptionHandlingMessages.InvalidArgumentException));
}
catch (Exception ex)
{
return new ResponseMessageResult(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ExceptionHandlingMessages.InternalServerError));
}
}
Ich möchte Statuscode überprüfen reagiert und reagiert auf Meldungen, während eine Ausnahme auftritt. Aber Problem ist, sobald meine Ausführung ResponseMessageResult
Code trifft, wirft es einen anderen ArgumentNullException
, der Value cannot be null.Parameter name: request
sagt. Aus diesem Grund kehrt die Steuerung nie zu meiner Komponententestmethode zurück.
Meine Einheit Testmethode als
[TestMethod]
public void Events()
{
_mockInputValidation.Setup(x => x.IsTrackingEventInputValid(It.IsAny<string>(), It.IsAny<string>())).Returns(false);
//act
IHttpActionResult actionResult = _trackingEventController.Events(string.Empty, string.Empty);
//assert
}
ich versuche, auch [ExpectedException(type)]
setzen, aber nicht viel hilfreich
wie kann ich dieses Problem lösen
Wenn Sie die Rückgabewerte im 'catch' Block testen wollen, nur eine Ausnahme in' _inputValidation.IsTrackingEventInputValid' werfen. Ich erinnere mich nicht an die tatsächliche Syntax, aber die Mock zu '_mockInputValidation.Setup ändern (x => x.IsTrackingEventInputValid (It.IsAny(), It.IsAny ())). Wirft (neue ArgumentException());' sollte Ihnen erlauben, das erste 'ResponseMessageResult' zu erhalten. –
Howwie
Zeigen Sie, wie Sie den Controller neu starten. Höchstwahrscheinlich ist die Anfrage null – Nkosi
Ich würde den Wert des Unit-Tests einer Aktionsmethode explizit in Frage stellen - ihr Verhalten hängt von vielen externen Framework-Setups ab. Es wäre besser, das Verhalten innerhalb der Aktionsmethoden zu minimieren (hinter Schnittstellen zu schieben) und Ende-zu-Ende mit Akzeptanztests zu testen, die tatsächlich die Endpunkte mit HTTP-Anforderungen erreichen. –