[Mono-bugs] [Bug 656918] New: Unexpected "method argument length mismatch" in System.Delegate.CreateDelegate

bugzilla_noreply at novell.com bugzilla_noreply at novell.com
Wed Dec 1 15:54:10 EST 2010



           Summary: Unexpected "method argument length mismatch" in
    Classification: Mono
           Product: Mono: Runtime
           Version: 2.6.x
          Platform: Macintosh
        OS/Version: Mac OS X 10.6
            Status: NEW
          Severity: Normal
          Priority: P5 - None
         Component: misc
        AssignedTo: mono-bugs at lists.ximian.com
        ReportedBy: dmoles.work at gmail.com
         QAContact: mono-bugs at lists.ximian.com
          Found By: ---
           Blocker: ---

User-Agent:       Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_5; en-US)
AppleWebKit/534.7 (KHTML, like Gecko) Chrome/7.0.517.44 Safari/534.7

I've got a class A that calls a method on interface B, passing to it one of its
own methods as sort of a continuation that B is supposed to call when it has a
result. The code seems to work fine in practice, but testing it with Moq
4.0.10827, targeting Mono/.NET 3.5, produces the stack trace below.

A correspondent on StackOverflow (see
ran the code with MS .NET and it worked fine, so it looks like a bug (or at
least an incompatibility) in Mono.

Reproducible: Always

Steps to Reproduce:
1. Run the unit test below.

public class A
    readonly B myB;

    public A (B b)
        myB = b;

    public void HandleC (C c)
        // do something

    public void DoFindC ()
        myB.FindC (HandleC);

public interface B
    // Finds a C and then passes it to handleC
    void FindC (Action<C> handleC);

public interface C

public class ATest
    public void TestDoFindC ()
        Mock<B> bMock = new Mock<B> ();
        A a = new A(bMock.Object);

        bMock.Verify(b => b.FindC(a.HandleC));
Actual Results:  
Test fails with the following stack trace:

System.ArgumentException : method argument length mismatch

at System.Delegate.CreateDelegate
(System.Type,object,System.Reflection.MethodInfo,bool) <IL 0x002db, 0x00624>
at System.Delegate.CreateDelegate
(System.Type,object,System.Reflection.MethodInfo) <IL 0x00004, 0x00015>
at (wrapper dynamic-method)
(System.Runtime.CompilerServices.ExecutionScope) <IL 0x00015, 0x00079>
at Moq.MatcherFactory.CreateMatcher (System.Linq.Expressions.Expression,bool)
<IL 0x0008e, 0x0018e>
at Moq.MethodCall..ctor
<IL 0x0010a, 0x0023f>
at Moq.Mock.Verify<Foo.B>
at Moq.Mock`1<Foo.B>.Verify
(System.Linq.Expressions.Expression`1<System.Action`1<Foo.B>>) <0x0005c>
at Foo.ATest.TestDoFindC () [0x0003d] in
at (wrapper managed-to-native) System.Reflection.MonoMethod.InternalInvoke
(object,object[],System.Exception&) <0x00004>
at System.Reflection.MonoMethod.Invoke
<IL 0x000d6, 0x0012a>

Expected Results:  
Test passes.

Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.

More information about the mono-bugs mailing list