【发布时间】:2015-07-08 14:11:42
【问题描述】:
我有一个使用 MOQ 的单元测试,其行为异常。我期望 IsAuthorizedAsync 方法始终返回 true,但它返回 false。这是将 IsAuthorizedAsync 方法添加到我的 Mock 对象的代码的简化版本。
public static IAuthenticationInterface GetAuthentication()
{
var mock = new Mock<IAuthenticationInterface>();
mock.Setup(e => e.IsAuthorizedAsync(It.IsIn<string>(), It.IsAny<MyEvent>())).Returns(System.Threading.Tasks.Task.FromResult(true)).Verifiable();
// return the mock object
return mock.Object;
}
这里的代码类似于使用它的代码:
bool isAuthorized = this.mockObject != null && await this.mockObject.IsAuthorizedAsync("abc123", myEvent).ConfigureAwait(false);
就像我说的,当它看起来应该总是返回 true 时,它返回 false。我有什么办法可以进入 lambda 表达式代码吗?或者,有什么方法可以让我查看调用 this.mockObject.IsAuthorizedAsync 时使用的实际 lambda 表达式?我怀疑这不是我想的那样。
-埃里克
【问题讨论】:
-
使用 Visual Studio 2013,我可以进入 lambda 表达式。只需在表达式上放置断点后使用 step in (f11)。
-
这对我来说看起来不错,并且在我设置类似的东西时工作,所以我认为设置不完全正确或发生了其他事情 - myEvent 的类型是什么?这绝对是 MyEvent 吗?
-
你是在模拟一个接口还是一个类?如果是类,方法是否标记为虚拟?
-
e 在第一个代码中 sn-p 是一个接口。在第二个 sn-p 中,myEvent 是 MyEvent 返回 true。
-
您可能有错字吗?
It.IsIn<string>()应该是It.IsAny<string>()吧?
标签: c# unit-testing lambda mocking moq