2015-05-02 16 views
12

Uczę się podstaw Web Api i chcę zwrócić obiekt i przekazać go przez Ok(object). Coś takiego:Jak zdobyć obiekt z metody HttpActionResult Ok (Web Api)?

[HttpGet] 
public IHttpActionResult Get() 
{ 
    var someString = ""; 
    return Ok(someString); 
} 

Teraz chcę przetestować tę metodę i dochodzić, jeżeli zwrócony ciąg z tej metody get() jest taka sama, jak oczekiwano. Chyba będzie wyglądać mniej więcej tak:

[TestMethod] 
public void TestGet() 
{ 
    IHttpActionResult result = controller.Get(); 
    Assert.AreEqual("", result.??); 
} 

Widziałem this pytanie, ale najlepszą odpowiedzią wyjaśnia, jak sprawdzić poprawność HttpStatusCode, a nie przekazany obiekt.

+2

zamiast testowania, że ​​wynik jest dokładnie równa się coś, co cię obchodzi w wyniku? –

+0

@JonSkeet Masz rację. Zamiast próbować sprawdzić, czy obiekt przekazujący jest ważny, po prostu wstawię kilka warunków i zależnie od nich zwrócę różne 'HttpActionResults'. Dziękuję bardzo. –

+0

W rzeczywistości istnieją przypadki, w których testowanie zwracanego wyniku ma sens. –

Odpowiedz

18

Dostęp do zwracanego ciągu można uzyskać, przesyłając wynik do OkNegotiatedContentResult<string> i uzyskując jego właściwość Content.

[TestMethod] 
public void TestGet() 
{ 
    IHttpActionResult actionResult = controller.Get(); 
    var contentResult = actionResult as OkNegotiatedContentResult<string>; 
    Assert.AreEqual("", contentResult.Content); 
} 

Przykład kodu z: http://www.asp.net/web-api/overview/testing-and-debugging/unit-testing-controllers-in-web-api

+6

@CodeCaster: updated. Ale czasami myślę, że kod jest prosty i nie wymaga wyjaśnienia. –

+0

Błąd Linia "IHttpActionResult result = controller.Get();" powinno być: "IHttpActionResult actionResult = controller.Get();" –

+0

@Paul Gorbas: dzięki, to był mały błąd, teraz jest naprawiony –

Powiązane problemy