为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Moq 模拟 IList.Add

使用 Moq 模拟 IList.Add

C#
holdtom 2022-12-24 11:49:50
我正在尝试设置一个最小起订量对象以针对使用 EF6 的业务层对象运行一些单元测试。到目前为止,我可以测试简单的方法调用并检查是否调用了这些方法。但是,有没有办法测试一个对象是否实际插入到基础集合中。这是我的模拟方法private Mock<DbSet<T>> CreateMockDbSet<T>(IQueryable<T> entities) where T : class{    var mockSet = new Mock<DbSet<T>>();    mockSet.As<IQueryable<T>>().Setup(m => m.Provider).Returns(entities.Provider);    mockSet.As<IQueryable<T>>().Setup(m => m.Expression).Returns(entities.Expression);    mockSet.As<IQueryable<T>>().Setup(m => m.ElementType).Returns(entities.ElementType);    mockSet.As<IQueryable<T>>().Setup(m => m.GetEnumerator()).Returns(entities.GetEnumerator());    IList<T> list = entities as IList<T>;    mockSet.As<IList<T>>().Setup(m => m.Add(It.IsAny<T>())).Returns(list.Add(It.IsAny<T>()));    mockSet.Setup(m => m.Include(It.IsAny<string>())).Returns(mockSet.Object);    return mockSet;}我试图Add从列表中模拟实际的方法,但正如上面所写的那样,没有方法.Return。这可能吗?在发生某些逻辑之后,我需要验证该对象是否已插入到我的模拟集合中。
查看完整描述

1 回答

?
慕娘9325324

TA贡献1783条经验 获得超5个赞

IList.Add方法返回void,所以你不能设置返回,而不是使用.Callback

mockSet.As<IList<T>>()
    .Setup(m => m.Add(It.IsAny<T>()))
    .Callback<T>(item => list.Add(item));

或使用Capture.In

mockSet.As<IList<T>>()
    .Setup(m => m.Add(Capture.In(list)));


查看完整回答
反对 回复 2022-12-24
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号