2016-11-15 3 views
1

私は、別のクラスのインスタンスを返す以下のシングルトンを持っています。返されたインスタンスオブジェクトにメソッドをモックしたい。私は最終クラスとシングルトンのためのPowerMockモッキング機能を読んできましたが、私のケースがそれらの下にあるかどうかはわかりません。私はいくつかの提案を感謝します。PowerMockを使用したシングルトンのgetInstanceのモーグ

when(SomeWrapper.getInstance().getMyActualObject().isActive()).thenReturn(false); 

は、私がSomeWrapperとMyActualObjectを模擬する必要があります

public final class SomeWrapper { 
    private MyActualObject MyActualObject; 
    private static final SomeWrapper instance = new SomeWrapper(); 

    private SomeWrapper() { 
     // singleton 
    } 

    public static SomeWrapper getInstance() { 
     return instance; 
    } 

    public void setMyActualObject(MyActualObject MyActualObject) { 
     if(this.MyActualObject == null) { 
      this.MyActualObject = MyActualObject; 
     } else { 
      throw new UnsupportedOperationException("MyActualObject is already set, cannot reset."); 
     } 
    } 

    public MyActualObject getMyActualObject() { 
     return MyActualObject; 
    } 
} 

は、だから今、私のユニットテストでは、私はモック次の行をしたいですか?ガイダンスとしてのコードサンプル?

+2

最初にJavaシネルパターンを使用しないでください。 (これはあなたのアプリケーションがシンクルトンオブジェクトを持つべきではないということを意味するものではありません...)sigeltonクラスをpublicコンストラクタを持つ通常のクラスにします。 –

答えて

1

ここでのポイントは、テストするのが難しいコードを書いたことです。また、PowerMockはこれを「修正」するのに役立ちますが、テストを簡単にするために実動コードを単純に修正することをお勧めします。例えば、のようなパッケージprotectedコンストラクタを追加することにより、

は:

SomeWrapper(MyActualObject myActualObject) { 
    this.MyActualObject = myActualObject; 
} 

これは、あなたが完全に有効なMyActualObjectインスタンスを受け取りSomeWrapperクラスのインスタンスを作成することができます。

実際にtestableという生産コードを作成する方法を知りたい場合があります。

+0

私はあなたと大丈夫ですが、これは質問に答えません。 –

関連する問題