【问题标题】:How to test JsonResult from .NET MVC controller如何从 .NET MVC 控制器测试 JsonResult
【发布时间】:2013-07-20 00:13:01
【问题描述】:

正在测试的控制器动作:

    [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);
    }

【问题讨论】:

    标签: c# asp.net-mvc unit-testing moq


    【解决方案1】:

    我必须先感谢这篇文章: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);
    

    希望这对您有所帮助或至少给您一个跳跃点。

    【讨论】:

      猜你喜欢
      • 2011-10-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 2016-07-16
      相关资源
      最近更新 更多