Moq 可以忽略传递给函数的参数数量吗?
本文关键字:参数 数数 函数 Moq | 更新日期: 2023-09-27 18:31:42
我正在尝试起订我的通用存储库。我有一个名为SingleOrDefaultInclude的方法,如下所示:
T SingleOrDefaultIncluding(Expression<Func<T, bool>> wherePredicate, params Expression<Func<T, object>>[] includes);
现在在我的单元测试中,我像这样设置了最小起订量:
_agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding
(
It.IsAny<Expression<Func<Agreement, bool>>>(),
It.IsAny<Expression<Func<Agreement, object>>>(),
It.IsAny<Expression<Func<Agreement, object>>>()
)
).Returns(AgreementMocks.GetOne());
我可以以某种方式指定传递给 SingleOrDefaultInclude(包括它)的任何参数都应返回我的协议吗?为了完成这项工作,我必须确保在我正在测试的方法中传递 3 个参数。或者我可以以某种方式将数组传递给最小起订量吗?
也许使用不"扩展"params
的形式?像这样:
_agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding
(
It.IsAny<Expression<Func<Agreement, bool>>>(),
It.IsAny<Expression<Func<Agreement, object>>[]>()
)
).Returns(AgreementMocks.GetOne());
请注意上面的[]
。未经测试。
如果我误解了,要冻结参数的数量,可以尝试:
_agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding
(
It.IsAny<Expression<Func<Agreement, bool>>>(),
It.Is<Expression<Func<Agreement, object>>[]>(array => array.Length == 2)
)
).Returns(AgreementMocks.GetOne());
使用It.Is<>
而不是It.IsAny<>
。