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

时间:2015-05-06 21:56:02

标签: ios mocking cedar-bdd

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

这就是我所拥有的:

        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 个答案:

答案 0 :(得分:0)

我认为你实际遇到的问题是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,但是当你给Cedar的{{1}整数5时,同样的事情也不会发生。因此,Cedar并不认为它们是相同的。你的第一个断言只是因为它的结果是0.如果要将它改为非零值,你就会发现它失败就像第二个断言那样。