У меня есть класс 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.