Moq: Проверка того, что метод был вызван с определенным делегатом, производит "несоответствие длины аргумента метода" - PullRequest
0 голосов
/ 01 декабря 2010

У меня есть класс 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 #, но как правильно это проверить?


Обновление: Для справки, я использую Mono 2.6.7 на MacOS 10.6.5и нацеливание на .NET 3.5.


Обновление еще раз: Лучше всего предположить, что это ошибка Mono;Я подал это как https://bugzilla.novell.com/show_bug.cgi?id=656918.

1 Ответ

1 голос
/ 10 декабря 2010
...