gpt4 book ai didi

Moq + CaSTLe Dynamic Proxy - 模拟嵌套通用接口(interface)的异常

转载 作者:行者123 更新时间:2023-12-04 06:17:51 24 4
gpt4 key购买 nike

我收到来自 CaSTLe Dynamic Proxy 的参数异常,同时使用 Moq 创建一个对象模拟,该对象使用具有接口(interface)约束的通用方法实现嵌套通用接口(interface)。

异常(exception)是: System.ArgumentException :无法将父级设置为接口(interface)。

在创建模拟后直接访问模拟的 Object 属性时发生。 (为了便于阅读,调用堆栈位于底部)

代码很简单,可以自我描述:

    public interface A<T>
{
void Method<Z>() where Z : T;
}

public interface B
{
}

[Test]
public void MockNestedGenericInterfaceTest()
{
Mock<A<B>> mock = new Mock<A<B>>();
var o = mock.Object; //argument exception here
}

如果删除了 where Z : T 子句,则测试不会生成异常。

我做了一些研究,找到了一张票 here .我正在使用最新版本的 Moq 和 CaSTLe。

有解决此问题的方法吗?我看到它工作的唯一方法是手动模拟实现。犀牛模拟对我也不起作用。

谢谢你。

调用堆栈:
at System.Reflection.Emit.TypeBuilder.SetParent(Type parent)

在 CaSTLe.DynamicProxy.Generators.Emitters.GenericUtil.CopyGenericArguments(MethodInfo methodToCopyGenericsFrom,字典 2 name2GenericType, ApplyGenArgs genericParameterGenerator)
at Castle.DynamicProxy.Generators.Emitters.AbstractTypeEmitter.CopyGenericParametersFromMethod(MethodInfo methodToCopyGenericsFrom)
at Castle.DynamicProxy.Generators.InvocationTypeGenerator.Generate(ClassEmitter class, ProxyGenerationOptions options, INamingScope namingScope)
at Castle.DynamicProxy.Contributors.InterfaceProxyWithoutTargetContributor.GetInvocationType(MetaMethod method, ClassEmitter emitter, ProxyGenerationOptions options)
at Castle.DynamicProxy.Contributors.InterfaceProxyWithoutTargetContributor.GetMethodGenerator(MetaMethod method, ClassEmitter class, ProxyGenerationOptions options, OverrideMethodDelegate overrideMethod)
at Castle.DynamicProxy.Contributors.CompositeTypeContributor.ImplementMethod(MetaMethod method, ClassEmitter class, ProxyGenerationOptions options, OverrideMethodDelegate overrideMethod)
at Castle.DynamicProxy.Contributors.CompositeTypeContributor.Generate(ClassEmitter class, ProxyGenerationOptions options)
at Castle.DynamicProxy.Generators.InterfaceProxyWithoutTargetGenerator.GenerateType(String typeName, Type proxyTargetType, Type[] interfaces, INamingScope namingScope)
at Castle.DynamicProxy.Generators.InterfaceProxyWithTargetGenerator.GenerateCode(Type proxyTargetType, Type[] interfaces, ProxyGenerationOptions options)
at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, IInterceptor[] interceptors)
at Moq.Proxy.CastleProxyFactory.CreateProxy(ICallInterceptor interceptor, Type[] interfaces, Object[] arguments)
at Moq.Mock
1.b__0()
最小起订量 1.InitializeInstance()
at Moq.Mock
1.OnGetObject()
在 Moq.Mock`1.get_Object()

最佳答案

此错误已在 DynamicProxy 的最新版本中修复。确保您使用的是最新版本的起订量

关于Moq + CaSTLe Dynamic Proxy - 模拟嵌套通用接口(interface)的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com