验证是否在子视图上设置了正确的帧

时间:2015-03-30 12:07:25

标签: ios ocmockito

简介

我想测试右侧帧是否在视图子视图上设置(注入为模拟)。

但是我似乎无法找到验证正确设置CGRect的方法

当前尝试

-(void)testThatCorrectFrameIsSet {
  //Arrange
  MKTArgumentCaptor *argumentCaptor = [[MKTargumentCaptor alloc] init];
  self.sut.subView = mock([UIView class]);

  //Act
  [self.sut awakeFromNib];

  //Assert
  [[[MKTVerify(self.sut.subView) withMatcher:[argumentCaptor capture]] setFrame:CGSizeZero];

  expect([argumentCaptor.value CGRectValue].size.x).to.beCloseToWithin(42, 0.001);
}

出了什么问题

我明白了:

"NSInvalidArgumentException", "-[_NSInlineData CGRectValue]: unrecognized selector sent to instance 0x7af325c0"

这让我想知道如何正确捕获CGRect值

旁注

我知道我可以注入一个实际的UIView而不是一个模拟的,但是我正在测试的实际代码阻止我这样做是因为这会使这个问题比需要的更难。

1 个答案:

答案 0 :(得分:1)

我认为您应该使用'CGRectZero'而不是'CGSizeZero',但这并不能解决问题。

看起来captor值不是NSValue。

//Arrange
MKTArgumentCaptor *argumentCaptor = [[MKTArgumentCaptor alloc] init];
UIView* subView = mock([UIView class]);

// Act
[subView setFrame:CGRectMake(1, 2, 3, 4)];

//Assert
[[MKTVerify(subView) withMatcher:[argumentCaptor capture]] setFrame:CGRectZero];

NSValue* capturedValue = [argumentCaptor value];
if (![capturedValue isKindOfClass:[NSValue class]])
{
    NSLog(@"Captured value is no NSValue!");
}

希望这有助于追踪问题。