2013-07-20 33 views
3

這裏是我的控制器的方法:如何從.NET MVC控制器測試JsonResult

[AuthorizeUser] 
    [HttpPost] 
    [ValidateJsonAntiForgeryToken] 
    public ActionResult EventDetails(int eventId) 
    { 
     string details = this._eventDataProvider.GetById(eventId).Comments; 

     if (string.IsNullOrEmpty(details)) 
      details = "This location has not entered any comments or further details for this event."; 

     return Json(new 
     { 
      details = details 
     }); 
    } 

這是我的測試..想知道什麼,我需要做測試的Json從控制器返回。感謝:

[TestMethod] 
    public void DetailsAreReturned() 
    { 
     // Arrange 
     eventsController = new EventsController(eventDataProvider.Object, playerEventDataProvider.Object, userDataProvider.Object, 
               tokenAuthent.Object, dataContext.Object, customerLocationDataProvider.Object); 

     eventDataProvider.Setup(x => x.GetById(1)).Returns(new Event() { Comments = "test" }); 

     // Act 
     JsonResult result = (JsonResult) eventsController.EventDetails(1); 

     // Assert 
     Assert.IsNotNull(result.Data); 

     Assert.AreEqual(??, result); 
    } 

回答

5

我必須給予信貸這篇文章第一:How do I iterate over the properties of an anonymous object in C#?

var result = new JsonResult{ Data = new {details = "This location has not entered any comments or further details for this event."}}; 

var det = result.Data.GetType().GetProperty("details", BindingFlags.Instance | BindingFlags.Public); 

var dataVal = det.GetValue(result.Data, null); 

希望這有助於或至少給你一個跳躍點。