首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用NullableContextAttribute存根类

无法使用NullableContextAttribute存根类
EN

Stack Overflow用户
提问于 2020-09-22 21:56:43
回答 2查看 422关注 0票数 6

我使用的是一个第三方库,其中有一些我试图用Rhino mock模拟的类。当我尝试为一个类创建存根时,我得到了以下错误。我找不到NullableContextAttribute是什么的引用,但我认为它与在某个地方的事件/委托定义上指定可空类型有关。我搞不懂IAttributeDissassembler是什么。

我读过一些关于使用AttributesToAvoidReplicating的解决方案,但我不确定应该给它提供什么类。NullableContextAttribute不是一个可以解析到我能找到的任何名称空间的类。

我正在做C#,.NET框架4.7.2。我尝试将我的C#语言级别更高一些,但我认为c# 8中的可空引用属性是任何.NET框架都不能针对的。

代码语言:javascript
复制
        var myStub = MockRepository.GenerateStub<SomeOtherClass>();


   Castle.DynamicProxy.ProxyGenerationException : There was an error trying to replicate non-inheritable attribute NullableContextAttribute using default attribute disassembler. Use custom implementation of IAttributeDisassembler (passed as 'AttributeDisassembler' property of ProxyGenerationOptions) to replicate this attribute.
   at Castle.DynamicProxy.DefaultAttributeDisassembler.Disassemble(Attribute attribute)
   at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.DefineCustomAttribute(Attribute attribute, IAttributeDisassembler disassembler)
   at Castle.DynamicProxy.Generators.BaseProxyGenerator.ReplicateNonInheritableAttributes(Type targetType, ClassEmitter emitter)
   at Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateType(String newName, Type[] interfaces)
   at Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(Type[] interfaces, ProxyGenerationOptions options)
   at Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
   at Castle.DynamicProxy.ProxyGenerator.CreateClassProxyType(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
   at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors)
   at Rhino.Mocks.MockRepository.MockClass(CreateMockState mockStateFactory, Type type, 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 
EN

回答 2

Stack Overflow用户

发布于 2020-09-30 16:20:46

这是我的解决方法。由于NullableContextAttribute仅用于编译器,因此您不能在源代码1中使用它。但是你可以在模拟程序集中找到这种类型,比如这个Array.Find(typeof(SomeOtherClass).Assembly.GetTypes(), t => t.Name == "NullableContextAttribute"),其中SomeOtherClass就是你试图模拟的东西。找到可以传递给Castle.DynamicProxy.Generators.AttributesToAvoidReplicating.AddType对象。

我重复一遍,这可能是最糟糕的解决方案,但它对我很有效。

票数 3
EN

Stack Overflow用户

发布于 2021-08-27 16:17:43

在类似的情况下,将GenerateStub更改为GenerateStrictMockWithRemoting也适用于我。您可以尝试:

代码语言:javascript
复制
var myStub = MockRepository.GenerateStrictMockWithRemoting<SomeOtherClass>();

不过,我不知道为什么它会起作用。

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

https://stackoverflow.com/questions/64011323

复制
相关文章

相似问题

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