Ich habe eine Funktion in einem Controller, der Unit-Tests, die Werte in der Kopfzeile der HTTP-Anfrage erwartet. Ich kann den HttpContext nicht initialisieren, weil er schreibgeschützt ist.Mock HttpContext für Unit-Test einen .NET Core MVC Controller?
Meine Controller Funktion erwartet einen HTTP-Request-Header-Wert für „Geräte-ID“
[TestMethod]
public void TestValuesController()
{
ValuesController controller = new ValuesController();
//not valid controller.HttpContext is readonly
//controller.HttpContext = new DefaultHttpContext();
var result = controller.Get();
Assert.AreEqual(result.Count(), 2);
}
Gibt es eine geradlinige Art und Weise, dies zu tun, ohne einen Dritten Bibliothek?
* Verwenden Sie nicht HttpContext? Der entscheidende Punkt bei der Verwendung von Controllern ist, dass die Daten die Parameter des Controllers durchlaufen. Wenn Ihr Controller den HttpContext zum Lesen von Daten verwendet, als wäre es eine WebForms-Seite, liegt ein Problem vor. –
@PanagiotisKanavos Der Wert in der Kopfzeile ist eine Information, aus welchem Mobilgerät der Anruf stammt. Dies ist erforderlich, um die korrekten Daten abzurufen. Die Geräte-ID befindet sich in der Kopfzeile, da die ID für die Authentifizierung benötigt wird, die von einem benutzerdefinierten Aktionsfilter verarbeitet wird. Ich könnte die Geräte-ID als Route Parameter übergeben, aber es wäre redundant –
Check FromHeaderAttribute, sondern auch das Duplikat überprüfen. HttpContext ist durch Konfiguration jetzt injizierbar –