使用Moq来模拟一些构造函数参数并让Ninject处理剩下的事情?

时间:2015-02-09 20:04:30

标签: unit-testing ninject moq

我的服务在构造函数中需要一堆参数,这些参数通常由Ninject注入。在编写单元测试时,我是否可以模拟其中一个构造函数参数,还有Ninject会做其余的吗?

1 个答案:

答案 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();的语法。但是你最好看一下这个网站,因为这里解释一切都超出了范围。