Ich versuche einige Unit-Tests für meinen ApiController zu schreiben und habe einige Probleme. Es gibt eine nette Erweiterungsmethode namens Request.CreateResponse, die beim Generieren von Antworten sehr hilfreich ist.
public HttpResponseMessage Post(Product product)
{
var createdProduct = repo.Add(product);
return this.Request.CreateResponse(HttpStatusCode.Created, createdProduct);
}
Gibt es eine Möglichkeit, CreateResponse zu verspotten, ohne Teilverspottungen zu verwenden oder "new HttpResponseMessage (...)" direkt zu verwenden?
CreateResponse
? Warum nicht auf den zurückgegebenenHttpResponseMessage
Content
undStatusCode
Eigenschaften behaupten, dass die richtigen Werte eingestellt sind?Antworten:
Eine andere Möglichkeit, dies zu lösen, besteht darin, Folgendes zu tun:
Wenn Sie ein Upgrade auf Webapi 5.0 durchführen, müssen Sie dies ändern in:
Der Grund, warum Sie dies tun müssen, ist, dass Sie
Request
auf dem Controller ausgefüllt haben müssen , sonstRequest
funktionieren die Erweiterungsmethoden nicht. Sie müssen auch einenHttpConfiguration
Satz für die Anforderung haben, da sonst das Routing und andere Teile der Pipeline nicht richtig funktionieren.quelle
Sie können das Controller-Objekt für folgende Testbarkeit einrichten:
Kopiert aus dem umfassenden Blog-Beitrag von Peter Provost über Unit Testing ASP.NET Web API .
quelle
Für Web API 2 können Sie einfach hinzufügen
Wie so
Sehen Sie hier für weitere Informationen.
quelle
WebAPI 1 hier mit einem ähnlichen Problem mit VB.
Ich habe es geschafft, die Antworten hier zu kombinieren, damit dies so einfach funktioniert:
Nur posten, falls es jemandem hilft.
quelle
Erstellen Sie in Ihrer Testklasse eine Instanz der Controller-Klasse. z.B
var customerController= new CustomerController();
quelle