OCMock 无法识别被调用的选择器
Posted
技术标签:
【中文标题】OCMock 无法识别被调用的选择器【英文标题】:OCMock does not recognize called selector 【发布时间】:2012-07-28 14:35:20 【问题描述】:我正在为使用 OCMock 的测试用例而苦苦挣扎。到目前为止,我在几个项目中使用了 OCMock,它总是按我的想法工作。我有以下方法来测试当我设置一个名为image
的属性时是否调用了[self setNeedsDisplay]
。
- (void)testSetTapColorCallsDrawRect
SMColorButton *button = [[SMColorButton alloc] initWithImage:nil];
id mock = [OCMockObject partialMockForObject:button];
// Exptect setNeedsDisplay.
[[mock expect] setImage:OCMOCK_ANY];
[[mock expect] setNeedsDisplay];
button.image = [UIImage imageNamed:@"Button.png"];
[mock verify];
image
属性的设置器看起来像这样。
- (void)setImage:(UIImage *)anImage
// Set the image if it changed.
if (anImage != image)
image = anImage;
[self setNeedsDisplay];
你可以看到[self setNeedsDisplay]
在setter中被调用了。但是当我运行测试时,出现以下错误:
OCPartialMockObject[SMColorButton]: expected method was not invoked: setNeedsDisplay
看起来好像没有调用该方法。但是,如果我在 setter 方法中设置断点,它会停止并显示该行已由应用程序执行。
你能帮帮我吗?我看不出我做错了什么......
【问题讨论】:
【参考方案1】:问题是你在嘲笑你正在测试的方法setImage:
。这种期望会拦截调用,因此它永远不会遵循被测类中的代码路径。尝试将您的测试更改为:
- (void)testSetTapColorCallsDrawRect
SMColorButton *button = [[SMColorButton alloc] initWithImage:nil];
id mock = [OCMockObject partialMockForObject:button];
[[mock expect] setNeedsDisplay];
button.image = [UIImage imageNamed:@"Button.png"];
[mock verify];
【讨论】:
就是这样!谢谢,我没有考虑过,但这完全合乎逻辑。 OCMock 只检查该方法是否被调用。测试现在按预期失败/运行。谢谢!以上是关于OCMock 无法识别被调用的选择器的主要内容,如果未能解决你的问题,请参考以下文章
OCMock:为啥在尝试调用 UIWebView 模拟时会出现无法识别的选择器异常?