Moq 在使用 ninject 时生成 class 声明

Moq generate class declaration while using ninject

我正在尝试对第 3 方库进行单元测试,该库的构造函数上有许多接口定义。

例如;

IKernel kernel = new StandardKernel();
kernel.Bind<IOwnerDataProvider>().To<OwnerDataProviderFake>();

我不得不手动创建 OwnerDataProviderFake,因为我不想使用它的实际实现。

有没有什么方法可以使用 Moq 创建此接口的伪实现而不是手动创建?

例如;

kernel.Bind<IOwnerDataProvider>().To<Mock.GenerateFakeClassDefinition<IOwnerDataProvider>()>();

当然,这就是最小起订量(和嘲笑)的全部意义所在。查看 Moq Quick Start 以获取更多创建模拟对象的示例,但试试这个开始:

kernel.Bind<IOwnerDataProvider>()
      .ToMethod(context => new Moq.Mock<IOwnerDataProvider>().Object);

这将在您每次从内核获取接口时创建一个新的 IOwnderDataProvider 接口模拟。

您可能希望通过调用 Setup 来配置它的行为,但如果没有您提供的更多信息,除此之外我无能为力。