首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嘲弄UIImagePNGRepresentation

嘲弄UIImagePNGRepresentation
EN

Stack Overflow用户
提问于 2016-02-26 21:08:05
回答 2查看 320关注 0票数 0

我正在尝试使用UIImagePNGRepresentation来模拟OCMock。UIImagePNGRepresentation接受UIImage并返回NSData。

但似乎你不能把它当作一个普通的函数来嘲弄。

我尝试了以下内容,但它没有编译。

代码语言:javascript
复制
id mockAlbumArt = [OCMockObject niceMockForClass:[UIImage class]];
id mockImageData = [OCMockObject niceMockForClass:[NSData class]];

id uiimageMock = [OCMockObject niceMockForClass:[UIImage class]];
[[[uiimageMock expect] andReturn:mockImageData] UIImagePNGRepresentation:mockAlbumArt];

如果您查看UIImage的标头,UIImagePNGRepresentation定义为:

代码语言:javascript
复制
UIKIT_EXTERN  NSData * __nullable UIImagePNGRepresentation(UIImage * __nonnull image);                               // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format

以前有人嘲笑过这个功能吗?任何帮助都将不胜感激,谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-27 00:03:14

你说得对,普通的函数不能那样被嘲弄。

像OCMock和OCMockito这样的模拟库为存根和验证方法调用提供了一种方法。UIImagePNGRepresentation不是一个方法,它是一个独立的C函数。

那么,您如何替换它进行测试呢?不要直接调用它,而是通过函数指针调用它。为了正常使用,请将UIImagePNGRepresentation分配给指针。为了进行测试,请分配您定义的函数。

票数 0
EN

Stack Overflow用户

发布于 2020-12-15 05:37:16

模仿类似于此的C函数可以很容易地使用Facebook库鱼钩来实现。https://github.com/facebook/fishhook

在测试文件中编写一个备用方法:

代码语言:javascript
复制
NSData * __nullable swizzled_UIImagePNGRepresentation(UIImage * __nonnull image)
{
    return [NSData data];
}

然后从测试函数中重新绑定符号,以便调用我们的方法而不是原来的方法。有点像摇摆法。

代码语言:javascript
复制
-(void)testAlbumArt
{
     rebind_symbols((struct rebinding[1]){{"UIImagePNGRepresentation", swizzled_UIImagePNGRepresentation}}, 1); 
    ....continue and expect [NSData data] when you call UIImagePNGRepresentation...
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35661769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档