Исключение безопасности Ninject.MockingKernel.Moq - PullRequest
2 голосов
/ 21 сентября 2011

Я использую Ninject для своего контейнера IoC и пытаюсь написать несколько юнит-тестов.Я нашел ядро ​​Ninject Mocking Kernel, так что я решил попробовать, но я не могу пройти самый простой тест.Мне чего-то не хватает, и мне нужна небольшая помощь.

Moq.4.0.10827.Fin Ninject-2.2.0.0-release-net-4.0 Ninject.MockingKernel-2.2.0.0-release-net-4.0

Мой модульный тест ...

    [TestMethod]
    public void Constructor_CanInitialize()
    {
        var kernel = new MoqMockingKernel();

        var mock = kernel.Get<IDataRepository>(); <--Error here

        Assert.IsInstanceOfType(mock, typeof(DataRepository));
    }

Вот ошибка ...

Метод теста TestFixture.Constructor_CanInitialize бросил исключение: System.TypeAccessException: попытка прозрачным методом безопасности 'Ninject.MockingKernel.Moq.MoqMockProvider.Create (Ninject.Activation.IContext) 'для доступа к критическому типу безопасности «Moq.Mock» не удалось.

Сборка «Ninject.MockingKernel.Moq, Version = 2.2.0.0, Culture =нейтральный, PublicKeyToken = c7192dc5380945e7 'помечен атрибутом AllowPartiallyTrustedCallersAttribute и использует модель прозрачности безопасности уровня 2.Прозрачность уровня 2 приводит к тому, что все методы в сборках AllowPartiallyTrustedCallers становятся прозрачными для безопасности по умолчанию, что может быть причиной этого исключения.

в Ninject.MockingKernel.Moq.MoqMockProvider.Create (контекст IContext) в c: \ Projects\ Ninject \ ninject.mockingkernel \ src \ Ninject.MockingKernel.Moq \ MoqMockProvider.cs: строка 64 в Ninject.Activation.Context.Resolve () в c: \ Projects \ Ninject \ ninject \ src \ Ninject \ Activation \ Context.cs: строка 157 в Ninject.KernelBase.b_ 7 (контекст IContext) в c: \ Projects \ Ninject \ ninject \ src \ Ninject \ KernelBase.cs: строка 375 в System.Linq.Enumerable. <> c _DisplayClass12 3.<CombineSelectors>b__11(TSource x) at System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext () в System.Linq.Enumerable.SingleOrDefault (IEnumerable 1 source) at Ninject.Planning.Targets.Target 1.GetValue (служба типа, родительский элемент IContext) в c: \ Projects \ Ninject \ ninject \ src \ Ninject \ Planning \ Targets \Target.cs: строка 179 в Ninject.Planning.Targets.Target 1.ResolveWithin(IContext parent) in c:\Projects\Ninject\ninject\src\Ninject\Planning\Targets\Target.cs: line 147 at Ninject.Activation.Providers.StandardProvider.GetValue(IContext context, ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 97 at Ninject.Activation.Providers.StandardProvider.<>c__DisplayClass2.<Create>b__1(ITarget target) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 81 at System.Linq.Enumerable.WhereSelectArrayIterator 2.MoveNext () в System.Linq.Buffer 1..ctor(IEnumerable 1 source) в System.Linq.Enumerable.ToArray (IEnumerable 1 source) at Ninject.Activation.Providers.StandardProvider.Create(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\Activation\Providers\StandardProvider.cs: line 80 at Ninject.Activation.Context.Resolve() in c:\Projects\Ninject\ninject\src\Ninject\Activation\Context.cs: line 157 at Ninject.KernelBase.<Resolve>b__7(IContext context) in c:\Projects\Ninject\ninject\src\Ninject\KernelBase.cs: line 375 at System.Linq.Enumerable.<>c__DisplayClass12 3.b__11(Источник x) в System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext() at System.Linq.Enumerable.<CastIterator>d__b1 1.MoveNext () в System.Linq.Enumerable.Single (источник IEnumerable`1) в Ninject.ResolutionExtensions.Get (корень IResolutionRoot, параметры IParameter []) в c: \ Projects \Ninject \ ninject \ src \ Ninject \ Syntax \ ResolutionExtensions.cs: строка 37 в TestFixture.Constructor_CanInitialize () в TestFixture.cs: строка 32

Ответы [ 2 ]

2 голосов
/ 25 сентября 2011

Я уже некоторое время борюсь с той же проблемой. Смотрите эту ветку, чтобы следовать моим усилиям: https://groups.google.com/d/topic/ninject/xInlcd2b1l8/discussion

Если вы используете NuGet, у вас есть два варианта:

  • Не используйте Ninject.MockingKernel прямо сейчас или
  • Соберите его из источника .

В любом случае вы можете захотеть сохранить вкладку в проекте, чтобы снова использовать ее через NuGet, когда будет доступна обновленная версия.

0 голосов
/ 15 октября 2015

Поздно на вечеринку, но это работает:

var mock = kernel.GetMock<IDataRepository>();
...