A
というクラスのインターフェイスがB
のメソッドを呼び出し、そのメソッドの1つとして継承B
は、結果があるときに呼び出されます。コードは実際にうまくいくようですが、Moqでテストする方法はわかりません。明らかなことを試してみると、System.ArgumentException : method argument length mismatch
が生成されます。 、私はまだ理解していない代表者といくつかの舞台裏魔法があると推測しているMoq:特定のデリゲートでメソッドが呼び出されたことを確認すると、メソッドの引数の長さの不一致が発生する
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をターゲットにしています。
再び更新:ベストの推測では、これはモノのバグであるということです。私はhttps://bugzilla.novell.com/show_bug.cgi?id=656918と書いています。
私はあなたのコードをコピーし、テストに合格しました。私はxUnitを使用していますが、それは重要ではないと思います。 Moqの最新バージョンを使用していますか? –
私はMoq 4.0.10827を使用しています - まだ最新バージョンであるようです。 Monoバグでしょうか?私はMono 2.6.7を使用していて、.NET 3.5をターゲットにしています。スタックトレースにNUnitクラスがないので、おそらくNUnitとxUnitの違いはありません。 –
私は、.NET 3.5をターゲットにしたテストを再実行しました。この時点では、Monoの問題のように見えます。 –