partialMockForObjectを使用してシングルトンクラスのモックを行うには、「removeAllExpectations」のようなメソッドを作成してすべての記憶されたものを削除する方法は?

シングルトンのためにOCMockで混乱し、2つのメソッドを取得しますが、それらのどれも私の意見では完璧ではありません。

  1. Using partialMockForObject. I want to use partialMockForObject to do singleton class mock. See following code, it works well, but the defect is that singleton [NSNotificationCenter defaultCenter] will remember previous mock behavior, then when invoked in another place, it will crash, unexpected. So my question is that how can I create a method like "removeAllExpectations” to remove all remembered ones?

    id aMock = [OCMockObject partialMockForObject:[NSNotificationCenter defaultCenter]];

    [aMock expect] removeObserver:[OCMConstraint isKindOfClass:[WhereIsMyPhoneViewController class]]];

    [[aMock verify];

  2. Using category method. See http://twobitlabs.com/2011/02/mocking-singletons-with-ocmock/ mentions another method to do singleton mock, personally I prefer partialMockForObject, you don't need to mock all methods when unit testing.

私の質問をOCMock開発グループに送ってきましたが、まだ回答が得られていないので、あなたの賢い人の意見が必要です。どんなアイデアや議論にも感謝します。

2
私はこの質問が実際に答えられたことを願っています。これが私のテストでやりたいことです。 3つの小さなテストに分割するのではなく、1つの論理テストを行い、その間にリセットします。
追加された 著者 SilverSideDown,

2 答え

OCMockの最新のソースコードを使用している場合(後 2012-04-06)、電話

[aMock stopMocking];

モックされたオブジェクトの状態をリセットします。

4
追加された
どのOCMockヘッダーでもstopまたはstopMockingは参照されません。 " - [NSProxy doesNotRecognizeSelector:stopMocking]が呼び出されました!"あなたはこれらがうまくいくと確信していますか?
追加された 著者 SilverSideDown,
私は ocmock.org/download から最新の2.0.1フレームワークダウンロードを再度確認しましたが、そこにはありません。しかし、 githubでソースを見ると正しいでしょう。 com/erikdoe/ocmock/blob/master/Source/OCMock /… があります。だから私は、これを動作させるためにソースからコンパイルする必要があると思います。ヘッドアップをありがとう。
追加された 著者 SilverSideDown,
stopMockingはOCMockObject.hで宣言されています
追加された 著者 Hai Feng Kao,

電話することができます:

[aMock stop];

モックされたオブジェクトの状態をリセットします。

1
追加された
ありがとうスマート男、ライブラリフレームワーク内のメソッドは実際に動作します。
追加された 著者 jianhua,
驚くべきことに、部分モックに関する不一致例外を完全に取り除き、これを私のtearDownメソッドに追加すると、例外/エラーがなくなりました。ありがとうございました!
追加された 著者 kyleturner,