[英]How to unit-test an action, when return type is ActionResult?
我已經為下面的行動編寫了單元測試。
[HttpPost]
public ActionResult/*ViewResult*/ Create(MyViewModel vm)
{
if (ModelState.IsValid)
{
//Do something...
return RedirectToAction("Index");
}
return View(vm);
}
只有當返回類型為ViewResult
時,測試方法才能訪問Model
屬性。 在上面的代碼中,我使用了RedirectToAction
因此這個動作的返回類型不能是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)
{
//...
}
}
請注意
Assert.IsInstanceOfType(result,typeof(RedirectToRouteResult));
已被棄用。
新的語法是
Assert.That(result, Is.InstanceOf<RedirectToRouteResult>());
試試這段代碼:
dynamic result=objectController.Index();
Assert.AreEqual("Index",result.ViewName);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.