2016-02-26 106 views
0

我想模擬UIImagePNGRepresentation使用OCMock。 UIImagePNGRepresentation接受UIImage並返回NSData。嘲笑UIImagePNGRepresentation

但似乎你不能把它當作普通函數來嘲笑它。

我試過的是以下內容,但不能編譯。

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

你說得對,普通函數不能被這樣嘲笑。

像OCMock和OCMockito這樣的模仿庫提供了一種存根和驗證方法調用的方法。 UIImagePNGRepresentation不是一個方法,它是一個獨立的C函數。

那麼你如何替換它進行測試呢?不要直接調用它,而是通過函數指針。對於正常使用,將UIImagePNGRepresentation分配給您的指針。爲了測試,分配一個你定義的函數。

+0

是有道理的。謝謝。 – ykonda