OCMock存根isSelected属性

时间:2014-04-04 08:21:53

标签: ios unit-testing ocmock

我正在尝试在UIButton上存根所选属性。 getter定义为:

@property (nonatomic, getter=isSelected) BOOL selected;

我的存根看起来像这样:

[[[button stub] andReturnValue:OCMOCK_VALUE(TRUE)] isSelected];

运行测试时收到以下错误:

Return value does not match method signature; signature declares 'c' but value is 'i'.

我认为这与getter=isSelected部分有关,但不确定发生了什么

是否可以存根此类吸气剂?

2 个答案:

答案 0 :(得分:4)

这很烦人。问题是将TRUE传递给OCMOCK_VALUE会导致创建integer类型的值。你得到的消息是OCMock说你想要stub的方法/属性是一个布尔值,但你提供了一个整数。

您可以使用以下任一方法强制创建实际的布尔值:

[[[button stub] andReturnValue:OCMOCK_VALUE((BOOL){TRUE})] isSelected];

[[[button stub] andReturnValue:@YES] isSelected];

顺便说一句,类似的问题出现在不同的数字类型中,但不幸的是,在OCMock中解决这个问题并非易事。例如:https://github.com/erikdoe/ocmock/pull/58

答案 1 :(得分:0)

这并没有回答我的问题,但是如果其他任何人遇到这个问题,则解决方法是对UIButton的实际实例进行部分模拟。

UIButton *button = [[UIButton alloc] init];
button.selected = TRUE;
id mockButton = [OCMockObject partialMockForObject:button];