Moq:验证使用特定委托调用的方法会产生“方法参数长度不匹配”

时间:2010-12-01 19:08:27

标签: delegates mono moq

我有一个类A,它调用接口B上的一个方法,并将一个自己的方法传递给它,作为B应该调用时的一个延续。它有一个结果。代码似乎在实践中运行良好,但我无法弄清楚如何使用Moq测试它 - 当我尝试显而易见的事情时,它会产生System.ArgumentException : method argument length mismatch。首先想到它可能是我的代码,但它与以下玩具案例的方式不同:

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
{
}

[TestFixture()]
public class ATest
{
    [Test()]
    public void TestDoFindC ()
    {
        Mock<B> bMock = new Mock<B> ();
        A a = new A(bMock.Object);
        a.DoFindC();

        bMock.Verify(b => b.FindC(a.HandleC));
    }
}

我猜测有一些我不理解的代表的幕后魔术,对C#来说相对较新,但是测试它的正确方法是什么?


更新:作为参考,我在MacOS 10.6.5上使用Mono 2.6.7并以.NET 3.5为目标。


再次更新:最好的猜测是这是一个Mono bug;我已将其归档为https://bugzilla.novell.com/show_bug.cgi?id=656918

1 个答案:

答案 0 :(得分:1)