Unit-Tests / Integrationstests Web-API mit HttpClient in Visual Studio 2013

Ich habe eine harte Zeit versucht zu testen, meine API-controller mit Visual Studio 2013. Meine one-Lösung verfügt über eine Web-API-Projekt und ein Projekt Testen. In meinem test-Projekt habe ich einen Unit Test mit diesem:

[TestMethod]
public void GetProduct()
{
    HttpConfiguration config = new HttpConfiguration();
    HttpServer _server = new HttpServer(config);

    var client = new HttpClient(_server);

    var request = new HttpRequestMessage
    {
        RequestUri = new Uri("http://localhost:50892/api/product/hello"),
        Method = HttpMethod.Get
    };

    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    using (var response = client.SendAsync(request).Result)
    {
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);

        var test = response.Content.ReadAsAsync<CollectionListDTO>().Result;
    }
}

Bekomme ich immer eine 404. Ich habe versucht mit meinem API eine Instanz von Visual Studio (IIS Express), und das Debuggen dieser Unit-Test in einer anderen Instanz. Aber kein Glück. Ich habe überprüft, dass ich diese URL in einem browser (wenn man in Visual Studio Debuggen) und ich sehe meine JSON-Antwort. Aber ich kann nicht herausfinden, wie es funktioniert mit meinem Gerät testen und HttpClient. Ich habe versucht, Beispiele zu finden online, aber kann nicht scheinen, einen zu finden. Kann mir da jemand helfen?

UPDATE 1:
Ich habe versucht, das hinzufügen einer route, aber nichts passiert.

HttpConfiguration config = new HttpConfiguration();

//Added this line
config.Routes.MapHttpRoute(name: "Default", routeTemplate: "api/product/hello/");

HttpServer _server = new HttpServer(config);

var client = new HttpClient(_server);

[...rest of code is the same]

Hier ist meine API-Controller

[HttpGet]
[Route("api/product/hello/")]
public IHttpActionResult Hello()
{
     return Ok();
}

UPDATE-Auflösung:
Ich war in der Lage, um es zu arbeiten, wenn ich neue HttpClient ohne HttpServer Objekt. Würde ich noch benötigen, um zwei Instanzen von VS ausführen obwohl. 1 läuft mein API-und anderen code ausführen der Unit-Test.

Hier ist eine funktionierende Methode.

[TestMethod]
public void Works()
{
    var client = new HttpClient(); //no HttpServer

    var request = new HttpRequestMessage
    {
        RequestUri = new Uri("http://localhost:50892/api/product/hello"),
        Method = HttpMethod.Get
    };

    request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    using (var response = client.SendAsync(request).Result)
    {
        Assert.AreEqual(HttpStatusCode.OK, response.StatusCode);
    }
}

Jemand wissen, warum es nicht funktioniert mit einem HttpServer und ein HttpConfiguration ging in HttpClient? Ich habe gesehen, viele Beispiele, die diesen verwenden.

könnte nicht einen Unterschied machen, aber warum nicht GetAsync direkt?
Sind Sie mit OWIN-pipeline mit start-up? Möglicherweise müssen Sie verwenden TestServer. blogs.msdn.microsoft.com/webdev/2013/11/26/...
Ich bin nicht mit owin.
welche version von asp.net-mvc-web-api verwenden Sie?
Wo ist der code für die Methode, die Sie versuchen zu testen? Das sieht aus wie ein integration-test, denn Sie sind nicht lustig/faking aus Abhängigkeiten.

InformationsquelleAutor duyn9uyen | 2016-05-27

Schreibe einen Kommentar