是否可以使用MockingKernel,以便自动生成模拟对象,如果与之交互,将抛出异常(a.k.a,saboteurs)?
当您想要获得具有各种依赖关系的对象时,这很有用,但您知道您的代码应该只与其中一些对象进行交互。如果您没有明确Bind
依赖项(通过ToMock
等),它应该返回一个在第一次与之交互时抛出异常的对象。
这比等待代码完成执行要好得多,然后写一堆检查以确保没有调用模拟。
这是否已经存在?
答案 0 :(得分:1)
上面提供的答案并没有说明如何使用MOQ设置Ninject MockingKernel,因此默认行为是Strict。为了别人的利益,这就是我找到的。
Ninject.MockingKernel.Moq命名空间为类NinjectSettingsExtensions提供方法SetMockBehavior()和GetMockBehavior(),允许您指定要用作全局默认值的模拟行为。我无法找到任何方法来覆盖单个GetMock()请求的默认值。
using Ninject;
using Ninject.MockingKernel.Moq;
var kernelSettings = new NinjectSettings();
kernelSettings.SetMockBehavior(MockBehavior.Strict);
using(var kernel = new MoqMockingKernel(kernelSettings))
{
var mockFoo = kernel.GetMock<IFoo>(); // mockFoo.Behavior == MockBehavior.Strict
}
答案 1 :(得分:0)
我一直在使用NSubstitute的MockingKernel实现。 NSubstitute并不真正支持&#34;严格&#34;模式,您无法通过NSubstituteMockingKernel
类进行配置。
但是,您可以配置Moq以执行严格模式。最重要的是,MoqMockingKernel
类允许您全局更改模拟行为。这样,任何未配置的调用都会导致抛出异常。
这正是我想要的。唯一的痛苦是从NSubstitute转向Moq。