我有一个界面,我正在使用几个不同的具体类。我希望有这样的东西......
_kernel.GetMock<ISerializeToFile>().Named("MyRegisteredName")
.Setup(x => x.Read<ObservableCollection<PointCtTestDataInput>>(
It.IsAny<string>()));
我正在开发的项目使用服务定位器模式 - 反模式,我一直不太喜欢...
最初我试过..
[ClassInitialize]
public static void ClassInitialize(TestContext testContext)
{
_kernel = new MoqMockingKernel();
}
[TestInitialize]
public void TestInitialize()
{
_kernel.Reset();
ServiceLocator.SetLocatorProvider(
() => new NinjectServiceLocator(_kernel));
_kernel.Bind<ISerializeToFile>().ToMock()
.InSingletonScope().Named("ObjectToFile");
_kernel.GetMock<ISerializeToFile>()
.Setup(x => x.Read<ObservableCollection<PointCtTestDataInput>>(
It.IsAny<string>()));
_kernel.GetMock<ISerializeToFile>()
.Setup(x => x.Save<ObservableCollection<PointCtTestDataInput>>(
It.IsAny<ObservableCollection<PointCtTestDataInput>>(),
It.IsAny<string>()));
}
我收到了标准的Ninject错误,说明有多个匹配的绑定可用。所以,我将_kernel = new MoqMockingKernel();
移到了TestInitialize中,然后该错误就消失了......也许我错误地猜测_kernel.Reset()会做什么?
答案 0 :(得分:4)
重置会从缓存中删除所有实例。它不会删除现有绑定。所以第二次测试将ISerializeToFile
两次。