为什么我不能直接将int或bool传递给OCMock的“andReturnValue”参数?

时间:2012-08-16 23:03:28

标签: objective-c ocunit ocmock

我试图这样做:

[[[mockQuestion stub] andReturnValue:YES] shouldNegate];
[[[mockQuestion stub] andReturnValue:123] randomNumberWithLimit];

但是这给了我这个警告/错误“不兼容的整数指针转换发送'BOOL'(又名'signed char')到'NSValue *'类型的参数”

我唯一可以解决的问题是:

BOOL boolValue = YES;
int num = 123;

[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE(boolValue)] shouldNegate];
[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE(num)] randomNumberWithLimit];

但这使得我的测试代码看起来过于冗长。有没有办法在不必设置变量的情况下全部内联?

2 个答案:

答案 0 :(得分:3)

您可以使用看起来像(type){value}的文字样式。这通常用于创建结构文字,但也适用于基本数据类型。这里的重要方面是这种类型的文字创造了一个可以解决的临时性。这意味着您可以像

一样编写代码
[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE((BOOL){YES})] shouldNegate];
[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE((int){123})] randomNumberWithLimit];

答案 1 :(得分:0)

该参数应该是一个对象指针。在这种情况下,它应该指向NSValue类的对象。