如何验证使用特定类型的参数调用方法

时间:2012-07-19 15:48:13

标签: fakeiteasy

我需要验证是否使用特定类型的对象调用方法

这是我想要测试它的方法的接口:

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

有人知道如何正确地做到这一点吗?

1 个答案:

答案 0 :(得分:15)

这是设计的,你要做的实际上是:

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

A&lt;?&gt;中指定的类型应始终是该方法所采用的确切参数类型。我确实考虑过更改它,以便你可以按照你提出的方式约束类型,如果我没记错,主要原因(但我认为还有其他原因)是在你引入重载的情况下它会更脆弱。 / p>

例如,请考虑您在IPlayer接口上引入了以下重载:

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

一旦你引入了这个重载,你的测试就会改变意义。