为什么单元测试模拟始终为null与控制器

时间:2016-01-28 08:04:42

标签: c# .net asp.net-mvc unit-testing mocking

想要单元测试使用模拟我的数据实际存储在内存中,为什么总是从控制器响应结果中获得 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模式。

1 个答案:

答案 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>;


}