Tom*_*han 17 typeloadexception moq
我有以下设置代码:
MockOf<IObjectSet<Dummy>>().Setup(c => c.AddObject(dummy)).Verifiable();
MockOf<IObjectContextWrapper>().Setup(c => c.GetObjectSet<Dummy>()).Returns(MockOf<IObjectSet<Dummy>>().Object);
Run Code Online (Sandbox Code Playgroud)
其中Dummy是一个空类定义,dummy是一个Dummy.MockOf<T>()是基类上的模拟管理功能,它基本上确保每次在类型上调用它时,它返回相同的模拟实例.
包含此设置代码的测试失败,TypeLoadException并显示以下消息:
System.TypeLoadException:从程序集'DynamicProxyGenAssembly2,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = a621a9e7e5c32e69'输入'IObjectSet`1Proxy389e220f10aa4d9281d0b9e136edc1d4'试图实现一个不可访问的接口.
在System.Reflection.Emit.TypeBuilder.TermCreateClass(RuntimeModule模块,Int32 tk,ObjectHandleOnStack类型)
的System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()
在System.Reflection.Emit.TypeBuilder.CreateType()
在Castle.DynamicProxy.Generators Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.GenerateCode(
类型为proxyTargetType,Type []接口,ProxyGenerationOptions选项)
的.Emitters.AbstractTypeEmitter.BuildType()在Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(类型interfaceToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions选项, IInterceptor []拦截器)
在Moq.Mock 1.InitializeInstance() 在Moq.Mock`1.get_Object()1.<InitializeInstance>b__0()
at Moq.Mock
在RepositoryTest.cs中的OddEnds.Tests.Data.EntityFramework.RepositoryTest.Delete_DeletesObjectFromObjectSet():第43行
我已System.Data.Objects在测试项目和正在测试的类所在的项目中导入并引用了System.Data.Entity.dll和Microsoft.Data.Entity.CTP.dll.构建成功,没有错误,警告或消息(除了一些与代码合同有关的...)
我该如何解决?
Bri*_*haw 16
您在测试中使用的任何接口或类是否在内部?你是否正在使用类似的[assembly: InternalsVisibleTo("YourTestAssembly")]东西来编译?
如果是这样,您还需要为DynamicProxyGenAssembly2添加一个,以便Moq动态生成类的代理.
//goes in the AssemblyInfo.cs where the internal interfaces / classes are defined
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Run Code Online (Sandbox Code Playgroud)
这是关于该主题的相关帖子
http://sonofpirate.blogspot.com/2009/09/my-first-foray-into-unit-testing-with.html
我希望这有帮助
The*_*tor 12
我发现在我的情况下,我创建了一个Dummy类实例,用于我的单元测试,这个实例恰好是私有的(因为我真的不想在外面共享测试对象).
我的代码是这样的:
var mockMonitor = new Mock<ICacheMonitor<int, PrivateObject>>();
Run Code Online (Sandbox Code Playgroud)
其中PrivateObject是我的TestClass中的私有类定义.因此,我的修复是为了确保Mock构造函数中的任何类型都是公共的.
public class PrivateObject () {}
Run Code Online (Sandbox Code Playgroud)
(显然我不会将我的公共对象称为PrivateObject ...)