2011-12-19 8 views
2
?すべて覚えていたものを削除するには、「removeAllExpectations」のようなメソッドを作成する方法を、シングルトンクラスのモックを行うにはpartialMockForObjectを

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

  1. partialMockForObjectの使用 partialMockForObjectを使用してシングルトンクラスのモックを行いたいのですが、それはうまくいきますが、シングルトン[NSNotificationCenter defaultCenter]は前のモックの動作を覚えています。予期せぬクラッシュ、私の質問は、どのように私は "removeAllExpectations"のようなすべての覚えているものを削除するメソッドを作成することができますか?

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

    [aMock expect] removeObserver:[OCMConstraint isKindOfClass:[WhereIsMyPhoneViewControllerクラス]]];

    [[aMock検証];

  2. カテゴリメソッドを使用します。 http://twobitlabs.com/2011/02/mocking-singletons-with-ocmock/を参照してくださいシングルトンモックを行う別の方法は、個人的に私はpartialMockForObjectを好む、あなたはユニットテスト時にすべてのメソッドをモックする必要はありません。

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

+0

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

答えて

1

あなたは呼び出すことができます。

[aMock stop]; 

を嘲笑オブジェクトの状態をリセットします。

+0

スマートな男、ライブラリフレームワークの中のメソッドが実際に動作します。 – jianhua

+0

驚くべきことに、私は部分的なモックに関する不一致例外を完全に取り除き、これを私のtearDownメソッドに追加すると例外/エラーがなくなりました。ありがとうございました! – kyleturner

4

あなたは( 2012-04-06後)OCMockの最新のソースコードを使用している場合は、嘲笑オブジェクトの状態をリセットするために

[aMock stopMocking]; 

を呼び出します。

+0

OCMockヘッダーで参照されているstopまたはstopMockingが表示されません。 " - [NSProxy doesNotRecognizeSelector:stopMocking]が呼び出されました!"あなたはこれらがうまくいくと確信していますか? – SilverSideDown

+1

stopMockingはOCMockObject.hで宣言されています –

+0

最新の2.0.1フレームワークをhttp://ocmock.org/download/から再度確認しましたが、そこにはありません。しかし、私がhttps://github.com/erikdoe/ocmock/blob/master/Source/OCMock/OCMockObject.hにあるソースを見ると、それはそこにあります。だから私は、これを動作させるためにソースからコンパイルする必要があると思います。ヘッドアップをありがとう。 – SilverSideDown

関連する問題