【发布时间】:2018-02-23 13:06:05
【问题描述】:
我正在尝试模拟以下存储库方法
IEnumerable<T> All(Expression<Func<T, bool>> criteria)
下面的模拟设置工作正常
repository.Setup(repo => repo.All(It.IsAny<Expression<Func<UserLog, bool>>>())).Returns(userLogs);
但是,当我想使用特定表达式进行设置时,它不起作用。调用时,方法“All”不会返回指定的用户日志对象。
repository.Setup(repo => repo.All(v=>v.UserId==userId)).Returns(userLogs);
我还尝试了以下方法。我知道它很丑,但我很好奇它是否会起作用,而且确实有效。
repository.Setup(ulr =>
ulr.All(It.Is<Expression<Func<UserLog, bool>>>(e =>
e.Compile().Invoke(new UserLog { UserId = userId }))))
.Returns(userLogs);
然而,奇怪的是,将那个繁琐的表达式移到一个单独的变量中并将其传递进去,并没有奏效。如下所示
var itis = It.Is<Expression<Func<UserLog, bool>>>(e => e.Compile().Invoke(new UserLog { UserId = userId }));
repository.Setup(ulr => ulr.All(itis)).Returns(userLogs);
被模拟的方法被调用如下;
repository.All(u=>u.UserId==userId);
我想做的是模拟特定表达式的方法>。
我不知道这个,希望得到一些帮助。
谢谢。
【问题讨论】:
-
it does not work,这是什么意思?它有任何错误吗?您看到了什么意外行为? -
那么设置不起作用。返回函数未按预期调用
-
您能否添加一个示例,说明对模拟方法的 调用 是什么样的?
-
repository.All(u=>u.UserId==userId);这就是调用模拟方法的方式
标签: c# unit-testing moq