Как заглушить IKernel Nineject, используя Rhino Mocks? - PullRequest
1 голос
/ 20 июня 2010
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 []) в MediaMover.Unit.Tests.ViewModelTests.OptionsViewModelTests.b__1 (IKernel x) в C:\ Dave \ Documents \ Visual Studio 2010 \ Projects \ Gigatube \ MediaMover.Unit.Tests \ ViewModelTests \ OptionsViewModelTests.cs: строка 33 в Rhino.Mocks.RhinoMocksExtensions.Expect [T, R] (T mock, Function 2 action) at Rhino.Mocks.RhinoMocksExtensions.Stub[T,R](T mock, Function 2 action) в MediaMover.Unit.Tests.ViewModelTests.OptionsViewModelTests.Initialize () в C: \ Users \ Dave \ Documents \ Visual Studio 2010 \ Projects \ Gigatube \ MediaMover.Unit.Tests \ ViewModelTests \ OptionsViewModelTests.cs: строка 33

1 Ответ

1 голос
/ 13 июля 2010

Я смог решить эту проблему, мне пришлось создать тестовый модуль и провайдера тестов и пропустить мои макеты через них.

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

Вот мой SetUp из моего теста:

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