2016-05-04 11 views
2

私がコード化したプライベートメソッドの1つをテストするためには、シングルトンをモックする必要があります。 PowerMockitoでいくつかのメソッドをテストした後PowerMockitoでシングルトンを嘲笑して

:私はこのクラスをモックすることができませんでした

PowerMockito.mockStatic(UtilDatabaseSoldeAutoCdeCommon.class); 
Mockito.when(UtilDatabaseSoldeAutoCdeCommon.getInstance()).thenReturn(mockDatabase); 

。したがって、私はすべての方法で私のメソッドをテストすることはできません、私はデータベースにアクセスします。

UtilDatabaseSoldeAutoCdeCommonは、例えば次のように定義される。

public class UtilDatabaseSoldeAutoCdeCommon extends AbstractUtilDatabase { 

private static UtilDatabaseSoldeAutoCdeCommon instance; 

private UtilDatabaseSoldeAutoCdeCommon() { 
    super(); 
} 

public static UtilDatabaseSoldeAutoCdeCommon getInstance() { 
    if(instance == null) { 
     instance = new UtilDatabaseSoldeAutoCdeCommon(); 
    } 
    return instance; 
} 

... 
} 

それのgetInstance()を呼び出したときに、私はpowermockitoをデバッグが、毎回のconsructorが呼び出され、それは(存在しない)構成ファイルをロードしようとして、それがクラッシュ。

正確には、設定ファイルは、UtilDatabaseEnrichissementのabsract親クラスの定数として定義され、コンストラクタで使用されます。

この部分をテストするにはどうすればよいですか?

PrepareForTest
+0

おそらく、シングルトンを使用するかどうかを再考しますか? –

+0

私は本当にこの選択肢がありません...私の仕事はプログラムの小さな進化であり、他の多くのモジュールで使われているようにこの部分を変更することはできません。 オブジェクトがインスタンス化されたときと同じように偽装することは不可能かもしれませんが、configファイルを開こうとします。 '@RunWith(PowerMockRunner.class) @PrepareForTest({EnrichissementProcess:そこで解決策は、私は私のクラスは、テストのために準備されたTHA言うのを忘れ – Biologeek

答えて

0

あなたは

+0

...私が知っているから不可能であることをinstanciatingせずにオブジェクトを作成することです。クラス、UtilDatabaseSoldeAutoCdeCommon.class}) public class EnrichissementProcessTest { ... ' – Biologeek

+0

@Captain Spaulding:サンプルコードを適切に編集してもよろしいですか? – Alexander

+0

'' doReturn(mockDatabase).when(UtilDatabaseSoldeAutoCdeCommon).getInstance(); ''構文を使用してみてください。 –

4

を模擬シングルトンクラス私は、これは動作するはずだと思う:

@PrepareForTest({UtilDatabaseSoldeAutoCdeCommon.class}) 
    public class SomeTest { 
     @Mock 
     UtilDatabaseSoldeAutoCdeCommon fakeSingletonInstance; 

     @Test 
     public void test() { 
      Whitebox.setInternalState(UtilDatabaseSoldeAutoCdeCommon.class, "instance", fakeSingletonInstance); 
      // Write here your test 
     } 
    } 
関連する問題