【问题标题】:how to verify that a method was called with an argument of a specific type如何验证是否使用特定类型的参数调用了方法
【发布时间】:2012-07-18 20:31:41
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: fakeiteasy


    【解决方案1】:

    这是设计使然,您实际上要做的是:

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

    在 A> 中指定的类型应该始终是方法采用的确切参数类型。实际上,我确实考虑过更改它,以便您可以按照您建议的方式限制类型,如果我没记错的话,主要原因(但我认为还有其他原因)是在您引入重载的情况下它会更加脆弱。

    例如,假设您在 IPlayer 接口上引入了以下重载:

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

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

    【讨论】:

    • 你的做法不错,我以为应该有这样的东西,只是在wiki上找不到
    猜你喜欢
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 2018-10-28
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多