2016-03-27 29 views
1

Bu muhtemelen oldukça basit bir soru ama itiraf edeceğim, sıkışıp kaldım.Birim Testi IHttpActionResult Controller - 200 OK için test başarısız oluyor

IHttpActionResult döndüren bir denetleyicim var ve bunun için birim sınamaları yazmam gerekiyor.

public IHttpActionResult GetPerson(int id) { 

    Person person = repository.Get(id); 

    if (person == null) { 
     throw new HttpResponseException(HttpStatusCode.NotFound); 
    } 

    return Ok(new { 
     User = person 
    }); 

} 

İşte birim test var:

İşte kontrolör var

[TestMethod] 
public void GetReturnsValidPerson() { 

    var userController = new UserController(); 

    IHttpActionResult actionResult = userController.GetPerson(1); 

    Assert.IsInstanceOfType(actionResult, typeof(OkResult)); 

} 

Ve burada testi hata var: Assert.IsInstanceOfType başarısız

. Beklenen türü: System.Web.Http.Results.OkResult mevcut tipi: System.Web.Http.Results.OkNegotiatedContentResult1 [<> f__AnonymousType11 [DataAccess.BO.Person]]

tam olarak burada neler oluyor ? Denetleyiciden dönüş bir HTTP 200 Ok cevabıdır. Neden bu OkNegotiatedContentResult bekleniyor?

cevap

2

Asp.Net belgelerinde, bir IHttpActionResult sonucu OkNegotiatedContentResult şeklindedir. Assert karşılaştırmanız bunun için kontrol etmelidir.

Unit Testing Controllers in Asp.Net

Eylem ürün bulunursa, bir yanıt gövdesinin

Get yöntemi Ok (ürün) çağırır 200 (OK) döndürür. biriminde, dönüş türünün OkNegotiatedContentResult olduğundan ve döndürülen ürünün doğru kimliğe sahip olduğundan emin olun.

+0

Sormadan önce belgeleri ve çok fazla blogu kontrol ettim, çünkü oldukça basit görünüyor. Bu işe yaramazsa o zaman? Assert.IsInstanceOfType (actionResult, typeof (OkNegotiatedContentResult )); '? Eşleşmeyen türlerden dolayı hala hata alıyorum. – Patrick

+0

Bu satırın dönüş türünü 'IHttpActionResult actionResult = userController.GetPerson (1); '' OkNegotiatedContentResult' olarak ayarladınız mı? Bu tür testler gereksiz olsa da. Sıfır dönüşü test etmek en iyisi ve yaptığım –

+0

döndürdüğüm nesne, onu çevirmem ve yayın başarısız. System.InvalidCastException: 'System.Web.Http.Results.OkNegotiatedContentResult'1 [' f__AnonymousType1'1 [DataAccess.BO.Person]] türünde bir nesne türetilemiyor '' System.Web.Http.Results.OkNegotiatedContentResult yazın '1 [System.Web.Http.Results.OkResult] '.' Satırı değiştirdi var actionResult = (OkNegotiatedContentResult ) userController.GetPerson (1);'. Sanırım, HTTP durum kodunu değil, nesnenin gerçek sonucunu test edeceğim. Üzgünüz, bu aptalca, Web API ile bu tür bir test için yeniyim. – Patrick

İlgili konular