muss eine Konvention für ApiControllers erstellen

8

Ich habe eine Reihe von funktionierenden imperativen Code im Test und ich versuche es auf eine essentielle Testkonvention herunterzukochen.

Mein Test sieht wie folgt aus:

%Vor%

Ich habe auch eine Anpassung, die dies ermöglicht, indem Sie die HttpConfiguration und HttpRequestMessage auf Standard-Nicht-Null-Werte setzen.

%Vor%

Zuerst sieht das hässlich aus, aber wenn ich Build & lt; & gt; (). omit (). mit (config) .with (request) verwende, wird die Auto-Anpassung, die zum Erstellen dieser Instanzen benötigt wird, abgeschaltet. p>

Zweitens funktioniert dies nur für einen SiteVersionController. Ich würde das lieber für all meine ApiControllers verallgemeinern (vielleicht ist das eine schlechte Idee, aber ich werde es erst wissen, wenn ich es versuche).

Im Wesentlichen wäre meine Konvention wie folgt: erstellt für alle ApiControllers diese ohne automatische Eigenschaften, setzt jedoch die http-Konfigurations- und Anforderungsnachrichteneigenschaften auf Standardwerte ungleich Null

    
cocogorilla 20.12.2013, 22:07
quelle

1 Antwort

7

ApiControllers sind ziemlich schwierig zu verkabeln, weil Sie ihnen bestimmte Eigenschaften zuweisen müssen, damit alles funktioniert. Zumindest müssen Sie die Eigenschaft Request zuweisen, da andernfalls Controller Request.CreateResponse nicht aufrufen kann. Daher ist das Deaktivieren der automatischen Eigenschaften für ApiController Instanzen keine gute Strategie. Stattdessen können Sie AutoFixture so konfigurieren, dass HttpRequestMessage Instanzen korrekt verdrahtet werden.

Web-API 1

Mit ASP.NET Web API 1 verwende ich normalerweise eine Anpassung wie folgt:

%Vor%

Da auto-properties standardmäßig aktiviert sind, wird dies eine passende Instanz von HttpRequestMessage zu ApiController.Request zuweisen. Zusammen mit einem Auto-Mocking Anpassung kann Fixture nun Instanzen von allen erstellen ApiController classes.

Web-API 2

Mit ASP.NET Web API 2 (5.0.0.0) sind die Dinge ein wenig komplizierter, aber mit ein wenig Versuch und Irrtum habe ich diese Anpassung 808 Tests bestanden:

%Vor%

Konventionen

Wenn Sie das in ein [AutoData] -Attribut verpacken, sollten Sie in der Lage sein, Ihren Test auf Folgendes umzuformen:

%Vor%     
Mark Seemann 21.12.2013, 20:55
quelle

Tags und Links