为什么单元测试模拟总是使用控制器为空
本文关键字:控制器 单元测试 模拟 为什么 | 更新日期: 2023-09-27 18:32:18
想单元测试使用模拟我的数据其实都存储在内存中,为什么总是从控制器响应结果中得到null。
这是我的控制器
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);
}
这是我的单元测试代码:
private Mock<IVersionService> _versionServiceMock;
private Mock<IUnitOfWorkAsync> _unitOfWorkAsync;
VersionController objController;
List<Model.Models.Version> listVersion;
[TestInitialize]
public void Initialize()
{
_versionServiceMock = new Mock<IVersionService>();
_unitOfWorkAsync = new Mock<IUnitOfWorkAsync>();
objController = new VersionController(_unitOfWorkAsync.Object, _versionServiceMock.Object);
listVersion = new List<Model.Models.Version>() {
new Model.Models.Version() { AppName="App 1",ObjectState=ObjectState.Added,AuditField=new AuditFields()},
new Model.Models.Version() { AppName="App 2",AppVersion="1.0",ObjectState=ObjectState.Added,AuditField=new AuditFields()},
new Model.Models.Version() { AppName="App 3",ObjectState=ObjectState.Added,AuditField=new AuditFields()}
};
}
[TestMethod]
public void Version_Get_All()
{
//Arrange
_versionServiceMock.Setup(x => x.Query().Select()).Returns(listVersion);
//Act
var result = (( objController.Index() as ViewResult).Model) as List<Model.Models.Version>;
}
为什么结果总是得到空,如何检查为什么空是得到的。
注意:我在项目控制器中使用此模式。
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>;
}