【发布时间】:2016-09-09 17:07:41
【问题描述】:
我正在尝试模拟这个方法
Task<TResult> GetResultAsync<TResult>(Func<string, TResult> transformFunc)
喜欢这个
iMock.Setup(m => m.GetResultAsync(It.IsAny<Func<string, object>>())).ReturnsAsync(new { isPair = false });
测试执行调用的方法将匿名类型传递给这样的泛型参数
instance.GetResultAsync(u => new {isPair = u == "something" }) //dont look at the function return because as generic could have diferent implementations in many case
Moq 永远不会将我的 GetResultAsync 方法与发送的参数匹配。
我正在使用最小起订量 4
【问题讨论】:
-
不确定...但为此目的使用安装程序可能不正确。如果您在单元测试
var testObject = { whatevs }中创建了匿名对象,您可以跳过设置并在最后iMock.Verify(x => x.GetResultAsync(testObject))进行验证。我相信这应该会按预期工作。 -
您希望模拟的行为如何?你没有指定任何东西。
-
Will 和 Yacoub 感谢您的关注。我用这个模拟方法的返回更新了我的问题。 @Will,我需要模拟该方法的行为,因为它将在我正在测试的另一个方法中使用
-
提醒一下,如果不付出额外的努力,这将无法正常工作。您不能创建匿名对象,并在另一个项目中使用它。我遇到了an issue doing the same thing last year。
-
我将此作为问题发布在 Moq 的问题跟踪器上:
moq/moq4#552。匹配匿名类型的对象看起来应该起作用;我会调查的。
标签: c# unit-testing moq anonymous-function anonymous-types