首页 > 解决方案 > 错误模拟具有两个参数的方法

问题描述

我有一个存储库,它有这样的方法。

FindFirstOrDefault<TEntity>(Expression<Func<TEntity, bool>> expression, params Expression<Func<TEntity, object>>[] includes)

我的 Mock 设置如下所示:

_repositoryMock.Setup(moq => moq.FindFirstOrDefault(It.IsAny<Expression<Func<Order, bool>>>(), It.IsAny<Expression<Func<Order, object>>[]>()))

我也试过这个:

_repositoryMock.Setup(moq => moq.FindFirstOrDefault(It.IsAny<Expression<Func<Order, bool>>>(), Array.Empty<Expression<Func<Order, object>>>()))

以前,当我对该 FindFirstOrDefault 方法(expression参数)只有一个参数时,它运行得很好。现在我已经添加了includes参数,我收到以下错误:

Invalid callback. Setup on method with 2 parameter(s) cannot invoke callback with different number of parameters (1).

为什么我在传递两个参数时收到一条错误消息,提示我只传递了 1 个参数?

标签: c#unit-testingmoq

解决方案


所以看来我只是忘了更新 Returns 以包含额外的参数。

我的整个设置之前看起来像这样:

_repositoryMock.Setup(moq => moq.FindFirstOrDefault(It.IsAny<Expression<Func<Order, bool>>>()))
            .Returns((Expression<Func<Order, bool>> expression =>
            {
                // RETURN LOGIC
            });

使用我的新参数,我更新为:

_repositoryMock.Setup(moq => moq.FindFirstOrDefault(It.IsAny<Expression<Func<Order, bool>>>(), Array.Empty<Expression<Func<Order, object>>>()))
            .Returns((Expression<Func<Order, bool>> expression) =>
            {
                // RETURN LOGIC
            });

这导致了我得到的错误。

我真正需要的是:

_repositoryMock.Setup(moq => moq.FindFirstOrDefault(It.IsAny<Expression<Func<Order, bool>>>(), Array.Empty<Expression<Func<Order, object>>>()))
            .Returns((Expression<Func<Order, bool>> expression, Expression<Func<Order, object>>[] includes) =>
            {
                // RETURN LOGIC
            });

推荐阅读