我有一个类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。