1

我正在模拟一个通用存储库,并且刚刚在我的 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);

第一个起订量有效,第二个无效。

4

1 回答 1

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));
于 2013-07-03T11:24:29.187 回答