使用Moq进行通用方法

Tho*_*mas 6 c# generics moq mocking

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

T Get<T>();
Run Code Online (Sandbox Code Playgroud)

我设置了我的模拟对象:

Mock<IKernel> mockKernel = new Mock<IKernel>();
        mockKernel.Setup(x => x.Get<IGetUserQuery>()).Returns(new GetUserQuery());
Run Code Online (Sandbox Code Playgroud)

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

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

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

IGetUserQuery : ICommand<UserQueryInput, UserQueryOutput>
Run Code Online (Sandbox Code Playgroud)

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

提前致谢

Pet*_*ete 5

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

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