Omu*_*Omu 23 asp.net-mvc unit-testing
我正在写一个单元测试,我称这样的动作方法
var result = controller.Action(123);
Run Code Online (Sandbox Code Playgroud)
结果是ActionResult
,我需要以某种方式得到模型,任何人都知道如何做到这一点?
Mar*_*ann 33
在我的ASP.NET MVC版本中Action
,Controller上没有方法.但是,如果您的意思是View
方法,那么您可以通过单元测试结果是否包含正确的模型.
首先,如果只返回特定Action的ViewResult,则将该方法声明为返回ViewResult而不是ActionResult.
例如,请考虑此Index操作
public ViewResult Index()
{
return this.View(this.userViewModelService.GetUsers());
}
Run Code Online (Sandbox Code Playgroud)
你可以像这样轻松地进入模型
var result = sut.Index().ViewData.Model;
Run Code Online (Sandbox Code Playgroud)
如果方法签名的返回类型是ActionResult而不是ViewResult,则需要先将其强制转换为ViewResult.
Max*_*Max 16
我们将以下部分放在testsbase.cs中,允许在测试中输入类型模型
ActionResult actionResult = ContextGet<ActionResult>();
var model = ModelFromActionResult<SomeViewModelClass>(actionResult);
Run Code Online (Sandbox Code Playgroud)
ModelFromActionResult ...
public T ModelFromActionResult<T>(ActionResult actionResult)
{
object model;
if (actionResult.GetType() == typeof(ViewResult))
{
ViewResult viewResult = (ViewResult)actionResult;
model = viewResult.Model;
}
else if (actionResult.GetType() == typeof(PartialViewResult))
{
PartialViewResult partialViewResult = (PartialViewResult)actionResult;
model = partialViewResult.Model;
}
else
{
throw new InvalidOperationException(string.Format("Actionresult of type {0} is not supported by ModelFromResult extractor.", actionResult.GetType()));
}
T typedModel = (T)model;
return typedModel;
}
Run Code Online (Sandbox Code Playgroud)
使用索引页面和列表的示例:
var actionResult = controller.Index();
var model = ModelFromActionResult<List<TheModel>>((ActionResult)actionResult.Result);
Run Code Online (Sandbox Code Playgroud)
Omu*_*Omu 10
考虑a = ActionResult;
ViewResult p = (ViewResult)a;
p.ViewData.Model
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27791 次 |
最近记录: |