У меня есть следующий тест:Почему реальный код вызывается в этом тесте с помощью RhinoMocks?
IUnityContainer unityContainer = MockRepository.GenerateStrictMock<IUnityContainer>();
unityContainer.Expect(c => c.IsRegistered<IServiceContainerRegistrar>()).Return(true).Repeat.Once();
Насколько я знаю, я создаю макет в IUnityContainer и я говорю ему, что вернется, когда кто-то вызывает метод IsRegistered
.
Я получаю следующее исключение:
Test method CommonInitializerTest.CommonInitializer_Initialize_WorksOnce threw exception:
System.InvalidOperationException: Previous method 'IEnumerator.MoveNext();' requires a return value or an exception to throw.
Со следующим StackTrace:
at System.Linq.Enumerable.FirstOrDefault(IEnumerable`1 source)
at Microsoft.Practices.Unity.UnityContainerExtensions.IsRegistered(IUnityContainer container, Type typeToCheck, String nameToCheck)
at Microsoft.Practices.Unity.UnityContainerExtensions.IsRegistered(IUnityContainer container, Type typeToCheck)
at Microsoft.Practices.Unity.UnityContainerExtensions.IsRegistered(IUnityContainer container)
at Drives.Services.Common.Tests.CommonInitializerTest.<CommonInitializer_Initialize_WorksOnce>b__0(IUnityContainer c) in CommonInitializerTest.cs: line 50
at Rhino.Mocks.RhinoMocksExtensions.Expect(T mock, Function`2 action)
Так Ожидать называет реальный код и как я не издевались все, что используется Единство - это неудача. Почему RhinoMock выполняет реальный код при регистрации ожидания?
Как вы назначаете контейнер с обрезанными единицами в тестируемую систему. Можете ли вы предоставить больше кода в своем модульном тесте, очевидно, скрываете любую вещь, которую вы не должны публиковать? Также просто проверьте, действительно ли isRegistered действительно насмешливо. Возможно, это статический метод ext, который не является макетным. – Spock
Вам нужно, чтобы вы опубликовали свой метод расширения. Похоже, какой-то код внутри использует выражение linq против вашего издевающегося контейнера. – TheCodeKing
@Raj: Возможно, вы написали решение. Как это метод расширения, может быть, его нельзя издеваться? –