Cedar - 检查是不是使用不同的值调用了两次方法

Posted

技术标签:

【中文标题】Cedar - 检查是不是使用不同的值调用了两次方法【英文标题】:Cedar - Checking that a method was called twice with different valuesCedar - 检查是否使用不同的值调用了两次方法 【发布时间】:2015-05-06 21:56:02 【问题描述】:

我正在尝试验证一个方法是否被使用特定值调用了两次,但我似乎无法验证这两个调用,只是第一个调用。我已经验证了该方法被调用了两次并且值是正确的,但是我不确定如何编写 cedar 规范。

这是我所拥有的:

        it(@"should call sleep with time intervals of 0 and 5", ^

            // subject is a spied on object
            subject should have_received(@selector(someMethod:)).with(0); // Passes
            subject should have_received(@selector(someMethod:)).with(5); // Fails
          

我得到的错误是:

Expected <MyObject> to have received message <someMethod:>, with arguments: <5> but received messages:
  someMethod:<0>
  someMethod:<5>

【问题讨论】:

【参考方案1】:

我认为您实际遇到的问题是 Cedar 对类型非常挑剔。例如,假设someMethod: 采用 NSTimeInterval,这就是您解决问题的方法。 (如果不是 NSTimeInterval,则替换为实际类型)。

    it(@"should call sleep with time intervals of 0 and 5", ^

        // subject is a spied on object
        subject should have_received(@selector(someMethod:)).with((NSTimeInterval)0);
        subject should have_received(@selector(someMethod:)).with((NSTimeInterval)5);
      

当您调用 [subject someMethod:5] 时,整数 5 会从整数隐式转换为 NSTimeInterval,但是当您将整数 5 赋予 Cedar 的 with() 时,不会发生同样的事情,因此 Cedar 不会将它们视为相同.您的第一个断言通过只是因为它为 0。如果您将其更改为非零值,您会发现它与第二个断言一样失败。

【讨论】:

以上是关于Cedar - 检查是不是使用不同的值调用了两次方法的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cedar 测试 iOS 控制器

Swift:检查来自同一类的 2 个对象是不是具有不同的值?

检查所有变量的值是不是不同的好方法

检查不同其他列中每行的值是不是相同

检查SQL中的表中是不是连续出现两个不同的值?

iOS测试控制器与Cedar