想要单元测试使用模拟我的数据实际存储在内存中,为什么总是从控制器响应结果中获得 null 。
这是我的控制器
<ul class="nav metismenu" id="side-menu">
<li>
<a href="#">Dashboards</a>
<ul class="nav nav-second-level collapse">
<li><a href="#A">A</a></li>
<li><a href="#B">B</a></li>
<li><a href="#C">C</a></li>
<li><a href="#D">D</a></li>
<li><a href="#E">E</a></li>
</ul>
</li>
<li>
<a href="F">F</a>
</li>
这是我的单元测试代码:
private readonly IUnitOfWorkAsync _unitOfWorkAsync;
private readonly IVersionService _versionService;
public VersionController(IUnitOfWorkAsync unitOfWorkAsync, IVersionService versionService)
{
this._unitOfWorkAsync = unitOfWorkAsync;
this._versionService = versionService;
}
public ActionResult Index()
{
var versions = _versionService.Queryable();
return View(versions);
}
为什么结果总是为null,如何检查为什么会得到null。
注意:我在项目控制器中使用this模式。
答案 0 :(得分:1)
Moq在模拟时创建自己的接口实现。默认情况下,模拟接口上的所有方法都将返回null。
尝试模仿_versionService.Queryable()
。像这样:
[TestMethod]
public void Version_Get_All()
{
//Arrange
_versionServiceMock.Setup(x => x.Queryable()).Returns(listVersion);
//Act
var result = (( objController.Index() as ViewResult).Model) as List<Model.Models.Version>;
}