使用 Moq 模拟一些构造函数参数并让 Ninject 处理其余部分?

Using Moq to mock some constructor arguments and letting Ninject take care of the rest?

我的服务在构造函数中使用了一堆参数,这些参数通常由 Ninject 注入。在编写单元测试时,我可以只模拟其中一个构造函数参数,而让 Ninject 完成其余的工作吗?

是的,你可以做到。当然,您也需要注册所有其他依赖项(来自您的生产代码或完成 "manually")。就这样

...instanciation of kernel and registration of non-mock types

var fooMock = new Mock<IFoo>();
kernel.Bind<IFoo>().ToConstant(fooMock.Object);

SomeTestee testee = kernel.Get<SomeTestee>();

但是,如果 IFoo 已经被生产代码绑定,您可以使用 Rebind 来替换绑定:

kernel.Rebind<IFoo>().ToConstant(fooMock.Object);

另一种选择是使用 Ninject.MockingKernel。这提供了类似 Bind<IService>().ToMock(); 的语法。但是你最好看看这个网站,因为在这里解释一切会超出范围。