1

我有一个与几个不同的具体类一起使用的接口。我希望有这样的东西......

_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() 的作用?

4

1 回答 1

4

重置会从缓存中删除任何实例。它不会删除现有绑定。所以第二次测试会有ISerializeToFile两次。

于 2013-09-01T23:05:54.857 回答