对泛型方法使用最小起订量

本文关键字:泛型方法 | 更新日期: 2023-09-27 18:01:49

完全简单的情况,但我不能使它工作。我遇到了一个问题,使用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中模拟过泛型,没有问题……是否存在不支持泛型mock的情况?这似乎是一个简单的案例。唯一的问题是IGetUserQuery反过来继承了一个泛型类型:

IGetUserQuery : ICommand<UserQueryInput, UserQueryOutput>

我不认为这会产生问题,因为ICommand实现的泛型类型是由IGetUserQuery静态定义的,所以我怀疑这是令人困惑的Moq。

Thanks in advance

对泛型方法使用最小起订量

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

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