この静的メソッドをテストしているとき
public class SomeClass {
public static long someMethod(Map map, String string, Long l, Log log) {
...
}
}
と
import org.apache.commons.logging.Log;
@RunWith(PowerMockRunner.class)
//@PrepareForTest(SomeClass.class)
public class Tests {
@Test
public void test() {
...
PowerMockito.mockStatic(SomeClass.class);
Mockito.when(SomeClass.someMethod(anyMap(), anyString(), anyLong(), isA(Log.class))).thenReturn(1L);
...
}
}
私は得InvalidUseOfMatchersException
た。私の質問は次のとおりです。
- すべての引数がマッチャーを使用しているのに、なぜこの例外が発生したのですか? それを解決する方法は?私はそれをデバッグしました、
isA(Log.class)
戻り値がnullであることがわかりました。 @PrepareForTest
注釈をテスト クラスに追加してテストを実行すると、junit が応答しません。なんで?
編集
引数マッチャーを使用しないようにしましたが、
org.mockito.exceptions.misusing.MissingMethodInvocationException: when() には「モックのメソッド呼び出し」でなければならない引数が必要です。例: when(mock.getArticles()).thenReturn(articles);
また、このエラーは次の理由で表示される場合があります。
final/private/equals()/hashCode() メソッドのいずれかをスタブします。これらのメソッドはスタブ/検証できません。
when() 内では、モックではなく他のオブジェクトでメソッドを呼び出します。
で ...
だからそれsomeMethod
自体が原因のようです。メソッドには同期ブロックがあります。Powermockito はそのようなメソッドをモックできるかどうか疑問に思っています。