Как я могу проверить лопасти в MVC Turbine с Rhino Mocks? - PullRequest
0 голосов
/ 24 февраля 2010

Я пытаюсь настроить тестирование блейд-модуля на производной турбине MVC. Проблема в том, что я не могу издеваться над интерфейсом IServiceLocator, не выбрав следующее исключение:

System.BadImageFormatException: An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)
at System.Reflection.Emit.TypeBuilder._TermCreateClass(Int32 handle, Module module)
at System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
at System.Reflection.Emit.TypeBuilder.CreateType()
at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType()
at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType()
at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.GenerateCode(Type proxyTargetType, Type[] interfaces, ProxyGenerationOptions options)
at Castle.DynamicProxy.DefaultProxyBuilder.CreateInterfaceProxyTypeWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, IInterceptor[] interceptors)
at Rhino.Mocks.MockRepository.MockInterface(CreateMockState mockStateFactory, Type type, Type[] extras)
at Rhino.Mocks.MockRepository.CreateMockObject(Type type, CreateMockState factory, Type[] extras, Object[] argumentsForConstructor)
at Rhino.Mocks.MockRepository.Stub(Type type, Object[] argumentsForConstructor)
at Rhino.Mocks.MockRepository.<>c__DisplayClass1`1.<GenerateStub>b__0(MockRepository repo)
at Rhino.Mocks.MockRepository.CreateMockInReplay<T>(Func`2 createMock)
at Rhino.Mocks.MockRepository.GenerateStub<T>(Object[] argumentsForConstructor)
at XXX.BladeTest.SetUp()

Все, что я ищу относительно этой ошибки, приводит меня к проблемам компиляции DLL 32- и 64-битной DLL, но MVC Turbine везде использует фасад локатора сервиса, и у нас не было никаких других проблем, только с использованием Rhino Mocks попытаться высмеять это.

Он взрывается во второй строке этого метода установки NUnit:

IRotorContext _context;
IServiceLocator _locator;

[SetUp]
public void SetUp()
{
    _context = MockRepository.GenerateStub<IRotorContext>();
    _locator = MockRepository.GenerateStub<IServiceLocator>();
    _context.Expect(x => x.ServiceLocator).Return(_locator);
}

Просто быстро; Я попытался реализовать фальшивую реализацию IServiceLocator, думая, что могу просто отслеживать вызовы методов регистрации типов. Это не будет работать в нашей настройке, потому что мы расширяем интерфейс локатора службы таким образом, что, если тип не основан на Unity, логика регистрации не вызывается.

Ответы [ 2 ]

1 голос
/ 18 июня 2010

Это было исправлено в бета-версии Moq v4.0. Проблема была в Castle DynamicProxy 2.1 при создании динамических прокси для интерфейсов с общими ограничениями.

http://code.google.com/p/moq/issues/detail?id=177

1 голос
/ 24 февраля 2010

Да, я столкнулся с той же проблемой с RhinoMocks при тестировании среды выполнения для Turbine. Ненавижу это говорить, но я обошел проблему, предоставив собственную фальшивку для IServiceLocator для того места, где я нуждался, но, как вы объяснили, вы не можете этого сделать. (

Я не слежу за этой статьей из вашего вопроса, "если тип не основан на Unity" ??

...