[英]OCMock an NSOperation
我正在嘗試編寫一些單元測試來測試我們正在編寫的一些自定義NSOperations
。 我想做的是創建NSOperation
的模擬並將其放在NSOperationQueue
,然后等待它完成。 我知道我可以調整方法而根本不使用OCMoc
k,但我真的不想這樣做。 我想用OCMock
。 我試圖運行的代碼如下所示:
MYOperation *operation = [MYOperation new];
id mockOperation = [OCMockObject partialMockForObject:operation];
[NSOperationQueue *queue = [NSOperationQueue new];
[queue setMaxConcurrentOperationCount:1];
[queue addOperation:mockOperation];
當單元測試到達此行時:
[queue addOperation:mockOperation];
我調用了一個解除分配的對象異常。 有人對我如何克服這個問題有任何建議嗎?
如果您正在使用ARC,則可能在創建模擬后立即釋放operation
,因為它不會再次訪問。 如果將其更改為此,則應修復錯誤:
[queue addOperation:operation];
...無論如何你應該做的 - 你正在測試你的對象,而不是模擬。
使用ARC時,Apple運行時對mockOperation中對象的引用將被設置為nil(我認為過於激進)。 但並非所有人都失去了。 您可以使用mockOperation設置存根和期望,並仍將操作傳遞給addOperation:方法; 即使您使用對原始對象的引用,部分模擬也會起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.