私はEclipseを使用して、Java、SpringのRestTemplate、およびMockitoを使用しています。 Springの残りのテンプレートをモックしようとしています。モックしているメソッドの最後のパラメーターはクラス型です。以下は、関数のシグネチャです。
public <T> ResponseEntity<T> exchange(URI url,
HttpMethod method,
HttpEntity<?> requestEntity,
Class<T> responseType)
throws RestClientException
このメソッドをモックする最初の試みは次のとおりです。
//given restTemplate returns exception
when(restTemplate.exchange(isA(URI.class), eq(HttpMethod.POST), isA(HttpEntity.class), eq(Long.class))).thenThrow(new RestClientException(EXCEPTION_MESSAGE));
ただし、このコード行はEclipseから次のエラーを生成します。
The method exchange(URI, HttpMethod, HttpEntity<?>, Class<T>) in the type RestTemplate is not applicable for the arguments (URI, HttpMethod, HttpEntity, Class<Long>)
次に、Eclipseは、最後のパラメーターを「クラス」キャストでキャストすることを提案しますが、「クラス」または他のタイプにキャストすると機能しないようです。
私はこれに関するヘルプをオンラインで探していましたが、要求されたパラメーターがクラス型であるという事実に困惑しているようです。
私がこれまで見てきた答えは、主にジェネリックコレクションに関連しています。ここでの助けは大歓迎です。
理解した。
呼び出されたメソッドはパラメーター化されたメソッドでしたが、マッチャー引数からパラメータータイプを推測できませんでした(最後の引数はクラスタイプでした)。
明示的な呼び出しを行う
when(restTemplate.<Long>exchange(isA(URI.class),eq(HttpMethod.POST),isA(HttpEntity.class), eq(Long.class))).thenThrow(new RestClientException(EXCEPTION_MESSAGE));
私の問題を修正しました。
以下のコードスニペットは私のために働いた。リクエストエンティティには、isA()の代わりにany()を使用しました。
PowerMockito
.when(restTemplate.exchange(
Matchers.isA(URI.class),
Matchers.eq(HttpMethod.POST),
Matchers.<HttpEntity<?>> any(),
Matchers.eq(Long.class)))
.thenThrow(new RestClientException(EXCEPTION_MESSAGE));