2017-04-13 4 views
1

私はこれに似た他の質問を見ましたが、この正確なユースケースはありません。静的メソッドによって設定されている最終的な静的変数をモックする方法はありますか?

私は、次のようなコードがある場合:

private static final String SOME_CONSANT = SomeStaticClass.getString(); 

どのように私はそれは常にnullポインタ例外を返さないようにこれをモックに行きますか? Whitebox.setInternalStateを使ってみましたが、静的メソッドで値が設定されていない場合にのみ動作するようです。私はまた、成功したhereの輪郭を描写してみました。

私は、静的メソッドは嘲笑されていないので、返却値は常にnullであるが、以下を使用すると、どちらか動作するようには思えないからだと理解。

PowerMockito.mockStatic(SomeStaticClass.class); 
when(SomeStaticClass.getString(Mockito.anyString())).thenReturn("test"); 
Whitebox.setInternalState(ClassUnderTest.class, "SOME_CONSANT", "value"); 

私は迷っています。これに関する助けを感謝します。

+1

あなたのコードをリファクタリングするほうがずっといいので、テストするだけでこの程度までハックする必要はありません。 –

+0

残念ながら、静的メソッドが従来のものであり、私はそれを使用する必要があるので、あまり変更することはできません – Toofy

+0

その場合、テストする必要がありますか?あなたのコードからそれを使用している場合は、代わりにそのレベルで嘲笑しようとします。 –

答えて

0

あなたの主な問題は、別の方法を模倣しようとしていることです。

このコードwhen(SomeStaticClass.getString(Mockito.anyString())).thenReturn("test");を使用すると、SomeStaticClass.getString(String parameter)の方法を模擬しますが、元のコードにはSomeStaticClass.getString()があります。

関連する問題