5

私たちが書いているいくつかのカスタムをテストするために、いくつかの単体テストを作成しようとしてNSOperationsいます。私がやりたいのは、 のモックを作成してNSOperationに置き、NSOperationQueueそれが完了するのを待つことです。メソッドを入れ替えてOCMock をまったく使用しないことはわかっていますが、実際にはそうしたくありません。を使いたいOCMockです。実行しようとしているコードは次のようなものです。

MYOperation *operation = [MYOperation new];
id mockOperation = [OCMockObject partialMockForObject:operation];
[NSOperationQueue *queue = [NSOperationQueue new];
[queue setMaxConcurrentOperationCount:1];
[queue addOperation:mockOperation];

単体テストがこの行に到達すると:

[queue addOperation:mockOperation];

割り当て解除されたオブジェクト例外への呼び出しを受け取ります。これを克服する方法について何か提案はありますか?

4

2 に答える 2

2

ARC を使用している場合はoperation、再びアクセスされないため、モックを作成した直後に解放される可能性があります。これに変更すると、エラーが修正されます。

[queue addOperation:operation];

...とにかくこれを行う必要があります-モックではなく、オブジェクトをテストしています。

于 2012-05-21T17:45:07.850 に答える
0

ARC を使用する場合、mockOperation内のオブジェクトへの参照は、Apple ランタイムによって非常に積極的に (積極的すぎると思います) nil に設定されます。ただし、すべてが失われるわけではありません。mockOperationを使用してスタブと期待値を設定し、さらに操作を addOperation: メソッドに渡すことができます。元のオブジェクトへの参照を使用する場合でも、部分モックは機能します。

于 2012-05-24T14:33:10.783 に答える