当前位置: 首页 > 编程语言 > C#

RhinoMocks不能发出遵循泛型类型限制规则的模拟分享

时间:2023-04-10 21:48:09 C#

不能让RhinoMocks发出遵循泛型类型限制规则的模拟所以,使用NUnit和RhinoMocks://Definesbasicbehaviorof所有持久域对象publicinterfaceIDomainObject{...}//定义特定于安全数据库的域对象publicinterfaceISecurityDomainObject:IDomainObject{...}//定义基本事务数据存储库;有多个实现者//每个都将TRest关闭到定义其数据库域类的接口publicinterfaceIRepository:IDisposablewhereTRest:IDomainObject{IUnitOfWorkBeginUnitOfWork();voidCommitUnitOfWork(IUnitOfWorkunitOfWork);voidRollBackUnitOfWork(IUnitOfWorkunitOfWork);voidSave(TdomainObject,IUnitOfWorkIUnitOfWorkunitOfWork)where(IUnitOfWorkunitOfWork)whereT:class,TRest;}publicinterfaceISecurityRepository:IRepository{}publicclassSecurityRepository:ISecurityRepository...//在N中运行时,此行会中断单元测试varsecurityRepository=MockRepository.GenerateMock();...我得到的错误是:System.TypeLoadException:方法'Save'ontype'ISecurityRepositoryProxyb8e21deb3cb04067a01ac5b63f7045af'fromassembly'DynamicProxyGenAssembly2,Version=0.0.0.0,Culture=neutral,PublicKeyToken=null'tryedtoimplicitlyimplementaninterfacemethodwithweaker类型参数约束。在System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule模块,Int32tk,ObjectHandleOnStack类型)在System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()在System.Reflection.Emit.TypeBuilder.CreateType().Emitters.AbstractTypeEmitter.BuildType()在Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.GenerateCode(TypeproxyTargetType,Type[]interfaces,ProxyGenerationOptionsoptions)在Castle.DynamicProxy.DefaultProxyBuilder.CreateInterfaceProxyTypeWithoutTarget(TypeinterfaceToProxy,Type[]additionalInterfacesToProxy,ProxyGenerationOptions选项)在Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithoutTarget(类型interfaceToProxy,类型[]additionalInterfacesToProxy,ProxyGenerationOptions选项)在Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(类型interfaceToProxy,类型[]additionalInterfacesToProxy,ProxyGInterceptoroptions)在Rhino.Mocks.MockRepository.MockInterface(CreateMockStatemockStateFactory,类型类型,Type[]extras)在Rhino.Mocks.MockRepository.CreateMockObject(类型类型,CreateMockState工厂,Type[]extras,Object[]argumentsForConstructor)在Rhino.Mocks。MockRepository.DynamicMock(Object[]argumentsForConstructor)在Rhino.Mocks.MockRepository.c__DisplayClass7`1.b__6(MockRepositoryr)在Rhino.Mocks.MockRepository.CreateMockInReplay(Func`2createMock)在Rhino.Mocks.MockRepository.GenerateMock(Object[]argumentsForConstructor)在CSHD.Tests.Unit.Presentation.LogiLoginTests.cs中的nTests.TestAuthenticationFails():第138行我在尝试针对具体类生成模拟时遇到类似错误,这次是在QueryFor()方法上如果我尝试重新定义在ISecurityRepository接口中使用TRest的方法,我会得到一个“System.BadImageFormatException:试图加载一个格式不正确的程序。(HRESULTexception:0x8007000B)”这看起来像是一个后备。我认为核心问题是RhinoMocks对将泛型参数用作泛型类型约束感到困惑。我不知道它在哪里被混淆,所以我不知道如何或是否不能混淆它。我有足够的集成测试覆盖率,如果绝对必要,我可以忽略这些失败的单元测试,但很明显,如果可以的话,我宁愿修复它们。你的意见?看起来这是一个由Castle.DynamicProxy引起的已知问题,该问题已在项目的最新主干中得到修复,但在最新的RhinoMocks版本中问题仍然存在:http://groups.google.com/group/rhinomocks/browse_thread/thread/2c1b53bf66b77b8e/ad09a6cd1e304a93如果您喜欢冒险,可以使用最新的DynamicProxy构建您自己的RhinoMocks,它应该可以修复它。看起来CastleDynamicProxy(RhinoMocks用于代理生成)没有正确生成代理类,因为您已经定义了通用参数。如果您像这样定义IRepository,则可以生成代理(以及模拟):publicinterfaceIRepository:IDisposablewhereT:class,IDomainObject{IUnitOfWorkBeginUnitOfWork();voidCommitUnitOfWork(IUnitOfWorkunitOfWork);voidRollBackUnitOfWork(IUnitOfWorkunitOfWork);voidSave(TdomainObject,IUnitOfWorkunitOfWork);IQueryableQueryFor(IUnitOfWorkunitOfWork);如果您确实需要以另一种方式定义它,则必须使用RhinoMocks提交错误。以上就是C#学习教程:RhinoMocks无法发出遵循泛型类型限制规则的模拟分享的所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表作品如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: