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

发布于 2024-09-06 18:19:58 字数 1099 浏览 5 评论 0原文

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:

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

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

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);

This throws an ArgumentNullException:

Message: Value cannot be null.
Parameter name: source

Stack Trace:
at System.Linq.Enumerable.Cast[TResult](IEnumerable source)
at Ninject.ResolutionExtensions.Get[T](IResolutionRoot root, IParameter[] parameters)
at MediaMover.Unit.Tests.ViewModelTests.OptionsViewModelTests.b__1(IKernel x) in C:\Users\Dave\Documents\Visual Studio 2010\Projects\Gigatube\MediaMover.Unit.Tests\ViewModelTests\OptionsViewModelTests.cs:line 33
at Rhino.Mocks.RhinoMocksExtensions.Expect[T,R](T mock, Function2 action)
at Rhino.Mocks.RhinoMocksExtensions.Stub[T,R](T mock, Function
2 action)
at MediaMover.Unit.Tests.ViewModelTests.OptionsViewModelTests.Initialize() in C:\Users\Dave\Documents\Visual Studio 2010\Projects\Gigatube\MediaMover.Unit.Tests\ViewModelTests\OptionsViewModelTests.cs:line 33

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨离汐 2024-09-13 18:19:58

我能够解决这个问题,我必须创建一个测试模块和一个测试提供程序,并通过它们传递我的模拟。

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);

I was able to solve this, I had to create a test module and a test provider and pass my mocks through those.

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);
        }
    }

Here is my SetUp from my test:

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文