我正在尝试使用OCMock模拟UIImagePNGRepresentation。 UIImagePNGRepresentation接受UIImage并返回NSData。
但似乎你不能把它模仿为普通的功能。
我尝试的是以下内容,但它没有编译。
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定义为:
UIKIT_EXTERN NSData * __nullable UIImagePNGRepresentation(UIImage * __nonnull image); // return image as PNG. May return nil if image has no CGImageRef or invalid bitmap format
之前有没有人做过嘲笑这个功能?任何帮助将不胜感激,谢谢。
答案 0 :(得分:0)
你是对的,普通的功能不能这样嘲笑。
模拟OCMock和OCMockito之类的库提供了一种存根和验证方法调用的方法。 UIImagePNGRepresentation不是一种方法,它是一个独立的C函数。
那么如何替换它进行测试呢?不要直接调用它,而是通过函数指针调用它。正常使用时,将UIImagePNGRepresentation指定给指针。要进行测试,请指定您定义的功能。
答案 1 :(得分:0)
使用Facebook库鱼钩可以轻松实现类似于C的模拟C函数。 https://github.com/facebook/fishhook
在测试文件中写一个替代方法:
my_dict = {
"Value1": "2000",
"Value2": "3000",
"Value3": "4000"
}
for key in my_dict:
value = my_dict[key]
if int(value) > 2000:
print(key, value)
,然后从测试函数中重新绑定符号,以便调用我们的方法而不是原始方法。一种类似的方法。
NSData * __nullable swizzled_UIImagePNGRepresentation(UIImage * __nonnull image)
{
return [NSData data];
}