c# - 当返回类型为 ActionResult 时,如何对操作进行单元测试?

标签 c# unit-testing asp.net-mvc-4 tdd

我已经为后续操作编写了单元测试。

[HttpPost]
public ActionResult/*ViewResult*/ Create(MyViewModel vm)
{
    if (ModelState.IsValid)
    {
        //Do something...
        return RedirectToAction("Index");
    }

    return View(vm);
}

只有当返回类型为ViewResult 时,测试方法才能访问Model 属性。在上面的代码中,我使用了 RedirectToAction 所以这个 Action 的返回类型不能是 ViewResult

在这种情况下,您如何对操作进行单元测试?

最佳答案

这是我的小例子:

public ActionResult Index(int id)
{
  if (1 != id)
  {
    return RedirectToAction("asd");
  }
  return View();
}

和测试:

[TestMethod]
public void TestMethod1()
{
  HomeController homeController = new HomeController();
  ActionResult result = homeController.Index(10);
  Assert.IsInstanceOfType(result,typeof(RedirectToRouteResult));
  RedirectToRouteResult routeResult = result as RedirectToRouteResult;
  Assert.AreEqual(routeResult.RouteValues["action"], "asd");
}

[TestMethod]
public void TestMethod2()
{
  HomeController homeController = new HomeController();
  ActionResult result = homeController.Index(1);
  Assert.IsInstanceOfType(result, typeof(ViewResult));
}

编辑:
验证结果类型为 ViewResut 后,您可以转换为它:

ViewResult vResult = result as ViewResult;
if(vResult != null)
{
  Assert.IsInstanceOfType(vResult.Model, typeof(YourModelType));
  YourModelType model = vResult.Model as YourModelType;
  if(model != null)
  {
    //...
  }
}

关于c# - 当返回类型为 ActionResult 时,如何对操作进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18865257/

相关文章:

angularjs单元测试元素$onInit绑定(bind)未定义

c# - 使用代码调用任务进行单元测试同步方法

jquery - 找到一个img并改变它的可见性

asp.net-mvc-4 - 如何编辑 Typescript 1.4 "specified task executable location"?

.net - 从 Dot Net MVC 4 异步执行批处理脚本

c# - 将大量数据复制到 SQL CE 数据库中

c# - C++大型程序/框架构建

c# - .NET是否有任何免费的OCR API?

node.js - 尝试从 Jest 单元测试连接到 mongo 时超时

C# - 将上传的 Excel 文件保存到 MemoryStream,然后用它来填充 DataTable