对泛型方法使用最小起订量
本文关键字:泛型方法 | 更新日期: 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容器的交互应该绝对最小化,通常只在系统的顶层"入口点"。