【发布时间】:2016-01-28 08:04:41
【问题描述】:
想单元测试使用 mocks 我的数据实际上存储在内存中,为什么总是从控制器响应结果中获取 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>;
}
为什么结果总是为空,如何检查为什么会出现空。
注意:我在项目控制器中使用this 模式。
【问题讨论】:
-
很可能您设置了一种方法,但控制器调用了另一种方法...minimal reproducible example 可以帮助验证这一点,但可能会太长 - 请考虑自己调试您的代码。
-
@Alexei Levenkov 感谢您的回复,调试后我确认 100% 控制器调用方法没有错。请告诉我一些指南如何找到实际发生的事情。正如我所说我使用了 URF 框架,他们用过hibernate,是不是问题的根源。谢谢
-
shamim,请注意您已接受展示我评论的帖子 - 您设置了
Query,但控制器调用了Queryable。请确保该答案确实回答了您的问题(而不仅仅是感谢您在答案的 cmets 中进行讨论)。
标签: c# .net asp.net-mvc unit-testing mocking