Ich habe eine Funktion in einem Controller, die ich als Unit-Test durchführe und die Werte im Header der http-Anforderung erwartet. Ich kann den HttpContext nicht initialisieren, da er schreibgeschützt ist.
Meine Controller-Funktion erwartet einen http-Anforderungsheaderwert 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 einfache Möglichkeit, dies zu tun, ohne eine Bibliothek eines Drittanbieters zu verwenden?
c#
asp.net-mvc
unit-testing
asp.net-core
James Wierzba
quelle
quelle
Antworten:
Ich konnte den httpcontext und den Header folgendermaßen initialisieren:
quelle
Anstatt den HTTPContext zu verspotten, ist es wahrscheinlich eine bessere Idee, den Header einem Parameter der Methode zuzuordnen. In der Steuerung am Ende dieser Antwort wird der
id
Parameter beispielsweise auf den Wertekopf mit einem Namen gesetzt, der gleich "Geräte-ID" ist ... Der Komponententest wird dannSie können den HttpContext zwar verspotten, aber meiner Meinung nach sollte er vermieden werden, es sei denn, Sie haben keine andere Wahl. Die Dokumentation zum FromHeaderAttribute finden Sie hier FromHeaderAttribute Class .
quelle