Я пытаюсь настроить тестирование блейд-модуля на производной турбине 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, логика регистрации не вызывается.