-
Notifications
You must be signed in to change notification settings - Fork 483
Description
Description
When mocking an interface that contains multiple methods with similar signatures using Moq, an exception is thrown during proxy generation. This issue arises because the proxy generator performs a case-insensitive comparison when determining if methods are duplicates, leading to a conflict even when method names differ only by case.
Moq version: 4.20.72
Castle.Core: 5.1.1
.Net version: net48;net8.0
Program.cs
using Moq;
_ = new Mock<IDialogService>().Object;
public interface IDialogService
{
bool? YESNoCancel(string? message, Exception? exception);
bool? YesNOCancel(string? message, Exception? exception);
bool? YesNoCANCEL(string? message, Exception? exception);
}Exception
The exception message is as follows:
Castle.DynamicProxy.DynamicProxyException: Duplicate element: Castle.DynamicProxy.Generators.MetaMethod
at Castle.DynamicProxy.Generators.MetaTypeElementCollection`1.Add(TElement item)
at Castle.DynamicProxy.Generators.MetaType.AddMethod(MetaMethod method)
at Castle.DynamicProxy.Contributors.CompositeTypeContributor.MembersCollectorSink.Add(MetaMethod method)
at Castle.DynamicProxy.Contributors.MembersCollector.<CollectMembersToProxy>g__AddMethod|7_5(MethodInfo method, Boolean isStandalone, <>c__DisplayClass7_0&)
at Castle.DynamicProxy.Contributors.MembersCollector.<CollectMembersToProxy>g__CollectMethods|7_2(<>c__DisplayClass7_0&)
at Castle.DynamicProxy.Contributors.MembersCollector.CollectMembersToProxy(IProxyGenerationHook hook, IMembersCollectorSink sink)
at Castle.DynamicProxy.Contributors.CompositeTypeContributor.CollectElementsToProxy(IProxyGenerationHook hook, MetaType model)
at Castle.DynamicProxy.Generators.BaseInterfaceProxyGenerator.GenerateType(String typeName, INamingScope namingScope)
at Castle.DynamicProxy.Generators.BaseProxyGenerator.<>c__DisplayClass13_0.<GetProxyType>b__0(CacheKey cacheKey)
at Castle.Core.Internal.SynchronizedDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
at Castle.DynamicProxy.Generators.BaseProxyGenerator.GetProxyType()
at Castle.DynamicProxy.DefaultProxyBuilder.CreateInterfaceProxyTypeWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyTypeWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options)
at Castle.DynamicProxy.ProxyGenerator.CreateInterfaceProxyWithoutTarget(Type interfaceToProxy, Type[] additionalInterfacesToProxy, ProxyGenerationOptions options, IInterceptor[] interceptors)
at Moq.CastleProxyFactory.CreateProxy(Type mockType, IInterceptor interceptor, Type[] interfaces, Object[] arguments) in /_/src/Moq/Interception/CastleProxyFactory.cs:line 50
at Moq.Mock`1.InitializeInstance() in /_/src/Moq/Mock`1.cs:line 309
at Moq.Mock`1.OnGetObject() in /_/src/Moq/Mock`1.cs:line 323
at Moq.Mock.get_Object() in /_/src/Moq/Mock.cs:line 181
at Moq.Mock`1.get_Object() in /_/src/Moq/Mock`1.cs:line 281
at Program.<Main>$(String[] args) in D:\repos\ConsoleApp2\ConsoleApp2\Program.cs:line 3
