クラスの静的メソッドのモックを設定しています。これを_@Before
_- annotated JUnitセットアップメソッドで行う必要があります。
私の目標は、実際のメソッドを呼び出すようにクラスをセットアップすることですexcept私が明示的にモックするメソッドに対して。
基本的に:
_@Before
public void setupStaticUtil() {
PowerMockito.mockStatic(StaticUtilClass.class);
// mock out certain methods...
when(StaticUtilClass.someStaticMethod(anyString())).thenReturn(5);
// Now have all OTHER methods call the real implementation??? How do I do this?
}
_
私が直面している問題は、StaticUtilClass
内でメソッドpublic static int someStaticMethod(String s)
がRuntimeException
値を指定された場合、残念ながらnull
をスローすることです。
以下のように、デフォルトの答えとして実際のメソッドを呼び出す明白なルートを単純に進めることはできません。
_@Before
public void setupStaticUtil() {
PowerMockito.mockStatic(StaticUtilClass.class, CALLS_REAL_METHODS); // Default to calling real static methods
// The below call to someStaticMethod() will throw a RuntimeException, as the arg is null!
// Even though I don't actually want to call the method, I just want to setup a mock result
when(StaticUtilClass.someStaticMethod(antString())).thenReturn(5);
}
_
デフォルトのAnswerを設定して、他のすべての静的メソッドで実際のメソッドを呼び出す必要があります。after私は、モックに興味のあるメソッドの結果をモックします。
これは可能ですか?
あなたが探しているのはpartial mockingです。
PowerMockでは、mockStaticPartialメソッドを使用できます。
PowerMockitoでは、スタブを使用できます。スタブは、定義されたメソッドのみをスタブし、他のメソッドは変更しません。
PowerMockito.stub(PowerMockito.method(StaticUtilClass.class, "someStaticMethod")).toReturn(5);
また、忘れないでください
@PrepareForTest(StaticUtilClass.class)