我正在模拟一个通用存储库,并且刚刚为我的Retrieve方法添加了第二个参数,允许我为对象属性传递包含字符串,我有点困惑如何模拟这个并得到TargetParameterCountException
如果有人能够朝着正确的方向推动我,那就太棒了。
接口:
IQueryable<T> Retrieve(Expression<Func<T, bool>> predicate);
IQueryable<T> Retrieve(Expression<Func<T, bool>> predicate, IEnumerable<string> includes);
起订量:
var mActionRepository = new Mock<IRepository<ContainerAction>>();
mActionRepository.Setup(m => m.Retrieve(It.IsAny<Expression<Func<ContainerAction, bool>>>()))
.Returns<Expression<Func<ContainerAction, bool>>>(queryable.Where);
mActionRepository.Setup(m => m.Retrieve(It.IsAny<Expression<Func<ContainerAction, bool>>>(), It.IsAny<IEnumerable<string>>()))
.Returns<Expression<Func<ContainerAction, bool>>>(queryable.Where);
第一个Moq工作,第二个不工作。
答案 0 :(得分:1)
在Returns
方法中,您需要将模拟方法的所有参数类型指定为泛型参数。
因此,您在第二次IEnumerable<string>
来电中错过了Returns
,这就是您获得TargetParameterCountException
的原因。
所以你的第二个Returns
应该是这样的:
mActionRepository.Setup(m => m.Retrieve(
It.IsAny<Expression<Func<ContainerAction, bool>>>(),
It.IsAny<IEnumerable<string>>()))
.Returns<Expression<Func<ContainerAction, bool>>, IEnumerable<string>>(
(predicate, includes) => queryable.Where(predicate));