Tom*_*son 27 c# unit-testing moq microsoft-sync-framework
我正在尝试从Microsoft Sync Framework模拟一个类.它只有一个内部构造函数.当我尝试以下内容时:
var fullEnumerationContextMock = new Mock<FullEnumerationContext>();
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
System.NotSupportedException:Parent没有默认构造函数.必须显式定义默认构造函数.
这是堆栈跟踪:
System.Reflection.Emit.TypeBuilder.DefineDefaultConstructorNoLock(MethodAttributes attributes)System.Reflection.Emit.TypeBuilder.DefineDefaultConstructor(MethodAttributes attributes)System.Reflection.Emit.TypeBuilder.CreateTypeNoLock()System.Reflection.Emit.TypeBuilder.CreateType()Castle. DynamicProxy.Generators.Emitters.AbstractTypeEmitter.BuildType()Castle.DynamicProxy.Generators.ClassProxyGenerator.GenerateCode(Type [] interfaces,ProxyGenerationOptions options)Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options)Castle. DynamicProxy.ProxyGenerator.CreateClassProxyType(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options)Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options,Object [] constructorArguments,IInterceptor [] interceptors)Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options,IInterceptor [] interceptors)Castle.DynamicProxy .ProxyGenerator.CreateClassProxy(类型classToProxy,Type [] additionalInterfacesToProxy,IInterceptor []拦截器)Moq.MockDynamicProxy.ProxyGenerator.CreateClassProxy(类型classToProxy,Type [] additionalInterfacesToProxy,IInterceptor []拦截器)Moq.MockDynamicProxy.ProxyGenerator.CreateClassProxy(类型classToProxy,Type [] additionalInterfacesToProxy,IInterceptor []拦截器)Moq.Mock
1.<InitializeInstance>b__0() Moq.PexProtector.Invoke(Action action) Moq.Mock1.InitializeInstance()
我该如何解决这个问题呢?
mar*_*ind 20
您不能模拟没有公共构造函数的类型,因为Moq将无法实例化该类型的对象.根据您要测试的内容,您有以下几种选择:
我并不是Moq的真正专家,但我认为您需要为构造函数指定参数。在Rhino Mocks中,您可以这样指定它们:
var fullEnumerationContextMock = new Mock<FullEnumerationContext>(arg1, arg2);
Run Code Online (Sandbox Code Playgroud)
Moq中可能与此类似。
| 归档时间: |
|
| 查看次数: |
15545 次 |
| 最近记录: |