我需要验证是否使用特定类型的对象调用方法
这是我想要测试它的方法的接口:
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
有人知道如何正确地做到这一点吗?
答案 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);
}
一旦你引入了这个重载,你的测试就会改变意义。