7

Ich habe eine httppost Web API-Methode. Ich muss ein Token als Autorisierungsheader übergeben und die Antwort sammeln.wie teste ich einen post (web-api) -Aufruf mit einem Token?

Ich verwende Web-API 2. Meine Post-Methode gibt IHttpActionResult ok (Modell) zurück.

Ich habe die Web-API mit POSTMAN Rest-Client getestet, die funktioniert.

Ich stecke an einem Punkt fest, an dem ich keinen UNIT-TEST schreiben kann, um meine API zu testen.

Kann ich auch nicht das Unit-Test-Projekt und das Web-API-Projekt in der gleichen Lösung haben? Ich habe versucht, Unit-Test-Projekt und Web-API-Projekt als Startup-Projekte zu setzen. Aber Unit-Test-Projekt ist nur eine Bibliothek, so dass es nicht funktionieren würde.

Kann mir bitte jemand durch diese Anleitung helfen?

Antwort

13

Zu Beginn haben Sie normalerweise das Unit-Testprojekt und das Api-Projekt in derselben Lösung. Das API-Projekt sollte jedoch das Startprojekt sein. Sie verwenden dann den Visual Studio Test Explorer oder ein anderes Äquivalent (z. B. einen Build-Server), um Ihre Komponententests auszuführen.

Um Ihre API-Controller zu testen, würde ich vorschlagen, dass Sie einen OWIN-Testserver in Ihren Komponententests erstellen und HTTP-Anforderungen für Ihre API ausführen.

[TestMethod] 
    public async Task ApiTest() 
    { 
     using (var server = TestServer.Create<Startup>()) 
     { 
      var response = await server 
       .CreateRequest("/api/action-to-test") 
       .AddHeader("Content-type", "application/json") 
       .AddHeader("Authorization", "Bearer <insert token here>") 
       .GetAsync(); 

      // Do what you want to with the response from the api. 
      // You can assert status code for example. 

     } 
    } 

Sie müssen jedoch Abhängigkeit Injektion verwenden, um Ihre Mocks/Stubs zu injizieren. Sie müssten Ihre Abhängigkeitsinjektion in einer Startup-Klasse in Ihrem Tests-Projekt konfigurieren.

Here's ein Artikel, der den Owin-Testserver und die Startup-Klasse ausführlicher erläutert.

+0

danke für die Antwort :) – user3825003

+0

Ich würde upvote dies 10-mal, wenn ich könnte! – dcarson

+0

Zum Testen der Authentifizierung lesen Sie diesen Beitrag - http://StackOverflow.com/a/25057928/968003 –

0

Für eine einfache Einheit, Routen- und Integrationstests, können Sie MyTested.WebApi überprüfen, die Ihnen erlaubt, die folgendes zu tun:

MyWebApi 
    .Server() 
    .Starts<Startup>() 
    .WithHttpRequestMessage(req => req 
     .WithRequestUri("/api/Books/Get") 
     .WithMethod(HttpMethod.Get) 
     .WithHeader(HttpHeader.Authorization, "Bearer " + this.accessToken)) 
    .ShouldReturnHttpResponseMessage() 
    .WithStatusCode(HttpStatusCode.OK) 
    .WithResponseModelOfType<List<BookResponseModel>>() 
    .Passing(m => m.Count == 10);