首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Rhino Mock测试MVC Turbine中的叶片?

如何使用Rhino Mock测试MVC Turbine中的叶片?
EN

Stack Overflow用户
提问于 2010-02-24 23:13:40
回答 2查看 482关注 0票数 0

我正在尝试在MVC Turbine派生的站点中设置刀片单元测试。问题是,我似乎无法模拟IServiceLocator界面而不触发以下异常:

代码语言:javascript
复制
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()

我搜索的关于这个错误的所有东西都指向32位与64位DLL编译问题,但MVC Turbine到处使用服务定位器外观,我们没有遇到任何其他问题,只是使用Rhino Mock尝试模拟它。

它在这个NUnit设置方法的第二行爆炸了:

代码语言:javascript
复制
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的,注册逻辑就不会被调用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-06-18 07:45:02

此问题已在Moq v4.0测试版中修复。当为带有泛型约束的接口创建动态代理时,Castle DynamicProxy 2.1中存在该问题。

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

票数 1
EN

Stack Overflow用户

发布于 2010-02-24 23:41:28

是的,在测试Turbine的运行时,我也遇到了与RhinoMocks相同的问题。我不想这么说,但是我解决了这个问题,在我需要的地方为IServiceLocator提供了我自己的fake,但是正如你所解释的,你不能这样做。:(

我不理解你的问题,“如果类型不是基于Unity的”?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2327028

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档