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 个参数。或者我可以以某种方式将数组传递给最小起订量吗?

Moq 可以忽略传递给函数的参数数量吗?

也许使用不"扩展"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<>