内部构造函数的Moq访问方法失败

时间:2017-08-18 19:54:32

标签: c# unit-testing moq

我一直试图用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.Mock 1.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

任何想法如何解决?

2 个答案:

答案 0 :(得分:1)

更改我的InternalsVisibleTo属性
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2,PublicKey=0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")]

[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2"]
似乎已经完成了这个伎俩。奇怪的是,原文是直接从moq docs

复制的

答案 1 :(得分:0)

在我的情况下,问题是我添加[assembly: InternalsVisibleTo属性的程序集也在GAC中,所以在运行我的单元测试时,它使用了GAC中的版本而不是更新的地方该属性已添加。 这导致了同样的错误。