使用Moq进行通用方法

时间:2011-07-11 14:07:19

标签: c# generics mocking moq

完全简单的情况,但我不能让它发挥作用。我遇到了使用Moq模拟泛型方法的问题(在本例中,在Ninject内核接口上):

T Get<T>();

我设置了我的模拟对象:

Mock<IKernel> mockKernel = new Mock<IKernel>();
        mockKernel.Setup(x => x.Get<IGetUserQuery>()).Returns(new GetUserQuery());

在运行时,我得到以下异常:

Expression references a method that does not belong to the mocked object: x => x.Get<IGetUserQuery>(new[] {  })

知道它为什么扔这个?我之前在没有问题的情况下嘲笑Moq中的泛型......是否存在不支持通用模拟的情况?这似乎是一个简单的案例。唯一的缺点是IGetUserQuery继承自泛型类型:

IGetUserQuery : ICommand<UserQueryInput, UserQueryOutput>

我没有看到这会产生问题,因为这个ICommand实现的泛型类型是由IGetUserQuery静态定义的,所以我怀疑这会让Moq感到困惑。

提前致谢

1 个答案:

答案 0 :(得分:5)

问题是T Get<T> ()实际上不是IKernel接口中定义的方法,它是一个定义的扩展方法here

你为什么要首先嘲笑T Get<T> ()?与IoC容器的交互应该是绝对最小的,通常只是在系统的顶层“入口点”。