2012-08-16 92 views
1

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

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

但是,这给了我这个警告/错误“不兼容的整数指针转换发送‘BOOL’(又名‘符号字符’)类型为‘NSValue *’的参数”

我能想出要解决的唯一办法就是要做到:

BOOL boolValue = YES; 
int num = 123; 

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

但是,这使我的测试代码显得如此过于冗长。是有办法做这一切在线,而不必设置变量?

回答

3

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

[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE((BOOL){YES})] shouldNegate]; 
[[[mockQuestion stub] andReturnValue:OCMOCK_VALUE((int){123})] randomNumberWithLimit]; 
+0

谢谢,这应该在我的测试中删除相当数量的样板文件! – 2012-08-20 19:54:55

+0

也不知道这个语法。这是新的吗?我会相应地更新OCMock文档。 – 2012-08-23 15:31:01

+0

@ErikDoernenburg:它们被称为“复合文字”,它们在C99中引入。所以他们已经存在了十多年,虽然由于某种原因他们并不是很出名。 – 2012-08-23 19:17:59

0

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

相关问题