簡體   English   中英

OCMock是一個NSOperation

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM