我一直试图用moq来模拟一个带有内部构造函数的类。从我之前的post开始,我似乎正在点击构造函数,但现在面临一个新的错误,即,
System.MethodAccessException 尝试方法' Castle.Proxies.MyClassProxy..ctor(Castle.DynamicProxy.IInterceptor [])' 访问方法' MyAssembly.MyClass..ctor()'失败。 在Castle.Proxies.StageProxy..ctor(IInterceptor []) ---内部异常堆栈跟踪结束--- at System.RuntimeMethodHandle.InvokeMethod(Object target,Object []> arguments,Signature sig,Boolean constructor) 在System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化) 在System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo culture,Object [] activationAttributes,StackCrawlMark& stackMark) 在System.Activator.CreateInstance(Type type,BindingFlags bindingAttr,Binder binder,Object [] args,CultureInfo culture,Object [] activationAttributes) 在System.Activator.CreateInstance(Type type,Object [] args) 在Castle.DynamicProxy.ProxyGenerator.CreateClassProxyInstance(类型proxyType,列出
1 proxyArguments, Type classToProxy, Object[] constructorArguments) at Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, Object[] constructorArguments, IInterceptor[] interceptors) at Moq.Proxy.CastleProxyFactory.CreateProxy(Type mockType, ICallInterceptor interceptor, Type[] interfaces, Object[] arguments) at Moq.Mock
1.b__20_0() 在Moq.PexProtector.Invoke(行动) 在Moq.Mock1.InitializeInstance() at Moq.Mock
1.OnGetObject() 在Moq.Mock`1.get_Object() 在c:\ users \ briaris-j \ documents \ visual studio 2017 \ Projects \ TestMoqInternals \ TestAssembly \ UnitTest1.cs:第16行的TestAssembly.UnitTest1.TestMethod1()中
这是我AssemblyInfo.cs
的{{1}},即包含我的内部类型的程序集
MyAssembly
任何想法如何解决?
答案 0 :(得分:1)
从
更改我的InternalsVisibleTo
属性
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2,PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]
到
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2"]
似乎已经完成了这个伎俩。奇怪的是,原文是直接从moq docs 复制的
答案 1 :(得分:0)
在我的情况下,问题是我添加[assembly: InternalsVisibleTo
属性的程序集也在GAC中,所以在运行我的单元测试时,它使用了GAC中的版本而不是更新的地方该属性已添加。
这导致了同样的错误。