J'essaie de mettre en place des tests d'unité de lame dans un site dérivé de MVC Turbine. Le problème est que je ne peux pas sembler se moquer de l'interface IServiceLocator
sans frapper l'exception suivante:Comment puis-je tester les lames dans MVC Turbine avec Rhino Mocks?
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()
Tout ce que je cherche au sujet de cette erreur me conduit à 32 bits contre 64 bits problèmes de compilation de DLL, mais MVC Turbine utilise la façade du localisateur de service partout et nous n'avons eu aucun autre problème, juste en utilisant Rhino Mocks pour tenter de le railler.
Il souffle sur la deuxième ligne de cette NUnit mis en place la méthode:
IRotorContext _context;
IServiceLocator _locator;
[SetUp]
public void SetUp()
{
_context = MockRepository.GenerateStub<IRotorContext>();
_locator = MockRepository.GenerateStub<IServiceLocator>();
_context.Expect(x => x.ServiceLocator).Return(_locator);
}
Juste un côté rapide; J'ai essayé d'implémenter une fausse implémentation IServiceLocator
, en pensant que je pouvais juste suivre les appels aux méthodes d'enregistrement de type. Cela ne fonctionnera pas dans notre configuration, car nous étendons l'interface du localisateur de service de telle sorte que si le type n'est pas basé sur Unity, la logique d'enregistrement n'est pas invoquée.
+1 Intéressant ... Je ne me suis pas rendu compte que Castle était le cadre sous-jacent pour Moq et RhinoMocks jusqu'à ce que je regarde cela et relis ma trace de pile –