我试图验证某个方法是否使用特定值调用两次,但我似乎无法验证这两个调用,只是第一次调用。我已经验证该方法被调用两次并且值是正确的,但我不确定如何编写雪松规范。
这就是我所拥有的:
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>
答案 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.如果要将它改为非零值,你就会发现它失败就像第二个断言那样。