MVC3 AsyncController的单元测试

时间:2011-11-11 22:43:20

标签: asp.net-mvc-3

我已经阅读了关于这个主题的几篇文章,但都没有直接解决我的问题。当您测试同步控制器方法时,您可以断言该方法返回您期望的类型:

Assert.IsInstanceOfType(result,typeof(JsonResult));

但是,在测试异步控制器方法时,我只能断言AsyncManager返回的类型是正确的类型:

var result = controller.AsyncManager.Parameters["articles"];
// Assertions
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result,typeof(IEnumerable<NewsArticle>));

对我来说,我应该测试Completed方法的返回类型,在我的例子中是JsonResult:

public JsonResult GetPublishedNewsArticlesCompleted(IEnumerable<NewsArticle> articles)
{
    return Json(articles, JsonRequestBehavior.AllowGet);
}

但我无法弄清楚如何做到这一点。我读了Dino Esposito的帖子,其中他说“xxxCompleted的代码很简单,可能甚至不需要测试”。我不买。完成的方法及其返回类型是我在此测试中最关心的。

所以我的问题是如何测试我的Completed方法实际上是否给了我一个JsonResult?或者迪诺是对的,我只是不应该在意?

感谢。

1 个答案:

答案 0 :(得分:0)

我对异步方法所做的只是测试Async方法而不是Completed方法。我这样做的决定是基于Completed方法中没有业务逻辑的事实。它所做的就是序列化我的返回对象并将其作为Json或Jsonp传回(如果它是跨域)。我没有写它,大多数人会告诉你,如果你不写它,不要测试它。