14

特定のタイプのオブジェクトでメソッドが呼び出されたことを確認する必要があります

これは、呼び出されたことをテストしたいメソッドとのインターフェースです。

interface IPlayer
{
   void Send(object message);
}

テスト:

var player1 = A.Fake<IPlayer>();
room.AddPlayer(player1);

room.DoSomething();

A.CallTo(() => player1.Send(A<Type1>.Ignored)).MustHaveHappened();

player1.Send私が得る多くの異なるオブジェクトで複数の呼び出しがあるのでInvalidCastException

誰かがこれを正しく行う方法を知っていますか?

4

1 に答える 1

15

これは仕様によるものであり、実際に実行しようとしているのは次のとおりです。

A.CallTo(() => player1.Send(A<object>.That.IsInstanceOf(typeof(MessageType)))).MustHaveHappened();

A <?>で指定されるタイプは、常にメソッドが使用する正確なパラメータータイプである必要があります。私は実際に、提案する方法でタイプを制限できるように変更することを検討しました。正しく覚えていれば(ただし、他の理由もあったと思います)、オーバーロードを導入した場合に脆弱になるということでした。

たとえば、IPlayerインターフェイスに次のオーバーロードを導入したとします。

interface IPlayer
{
   void Send(object message);
   void Send(Type1 message);
}

このオーバーロードを導入すると、テストの意味が変わります。

于 2012-07-23T07:39:03.117 に答える