我的服务在构造函数中需要一堆参数,这些参数通常由Ninject注入。在编写单元测试时,我是否可以模拟其中一个构造函数参数,还有Ninject会做其余的吗?
答案 0 :(得分:1)
是的,你可以这样做。当然,您也需要注册所有其他依赖项(从您的生产代码或“手动”完成)。只是做
...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();
的语法。但是你最好看一下这个网站,因为这里解释一切都超出了范围。