繁体   English   中英

如何使用Rhino Mocks存根ninject的IKernel?

[英]How to stub ninject's IKernel using Rhino Mocks?

var mocks = new MockRepository();
var access = new Access();
access.ShowRepository = _mocks.Stub<IShowRepository>();
access.ShowRepository.Stub(x => x.GetShows()).Return(new List<Show>());
var kernel =_mocks.Stub<IKernel>();
kernel.Stub(x => x.Get<Access>()).Return(access);

这将引发ArgumentNullException:

消息:值不能为空。
参数名称:来源

堆栈跟踪:位于MediaMover.Unit.Tests.ViewModelTests.OptionsViewModelTests.b__1(IKernel)的Ninject.ResolutionExtensions.Get [T](IResolutionRoot根,IParameter []参数)的System.Linq.Enumerable.Cast [TResult](IEnumerable源) x)在C:\\ Users \\ Dave \\ Documents \\ Visual Studio 2010 \\ Projects \\ Gigatube \\ MediaMover.Unit.Tests \\ ViewModelTests \\ OptionsViewModelTests.cs:Rhino.Mocks.RhinoMocksExtensions.Expect [T,R](T模拟, 2 action) at Rhino.Mocks.RhinoMocksExtensions.Stub[T,R](T mock, Function位于2 action) at Rhino.Mocks.RhinoMocksExtensions.Stub[T,R](T mock, Function 2动作)在MediaMover.Unit.Tests.ViewModelTests.OptionsViewModelTests.Initialize()在C:\\ Users \\ Dave \\ Documents \\ Visual Studio 2010 \\ Projects \\ Gigatube \\ MediaMover.Unit.Tests \\ ViewModelTests \\ OptionsViewModelTests.cs:第33行

我能够解决这个问题,我必须创建一个测试模块和一个测试提供程序,然后将模拟传递给它们。

class DbAccessProvider : Provider<Access>
    {
        public Access DbAccess { get; set; }
        protected override Access CreateInstance(IContext context)
        {
            return DbAccess;
        }
    }

class TestModule : NinjectModule
    {
        public DbAccessProvider DbAccessProvider { get; set; }
        public override void Load()
        {
            Bind<Access>().ToProvider(DbAccessProvider);
        }
    }

这是我测试中的设置:

access = new Access();
access.SettingsRepository = MockRepository.GenerateStub<ISettingsRepository>();
access.ShowRepository = MockRepository.GenerateStub<IShowRepository>();
access.SettingsRepository.Stub(x => x.GetById(1)).Return(_settings);
DbAccessProvider dbAccessProvider = new DbAccessProvider();
dbAccessProvider.DbAccess = access;
TestModule testModule = new TestModule();
testModule.DbAccessProvider = dbAccessProvider;
var kernel = new StandardKernel(testModule);
target = new OptionsViewModel(kernel);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM