web-dev-qa-db-ja.com

Resttemplate交換メソッド用のmockito junitの書き方

以下のメソッドのmockito junitの書き方:

@Autowired
RestTemplate restTemplate;

ResponseEntity<?> execute(final String url, HttpMethod httpMethod,
                          HttpEntity<?> entityRequest,
                          String.class, 
                          Map<String, String> urlVariables){
    restTemplate.exchange(url, httpMethod, entityRequest, responseType, urlVariables);
}

書き方を教えてください。

13
Java Learing
@RunWith(MockitoJUnitRunner.class)
public class ToTestTest {

  @InjectMocks
  private YourClass toTest;

  @Mock
  private RestTemplate template;

  @Test
  public void test() {
    toTest.execute(Mockito.anyString(), Mockito.any(), Mockito.any(), 
                   Mockito.any(), Mockito.any());

    Mockito.verify(template, Mockito.times(1))
                    .exchange(Mockito.anyString(),
                                    Mockito.<HttpMethod> any(),
                                    Mockito.<HttpEntity<?>> any(),
                                    Mockito.<Class<?>> any(),
                                    Mockito.<String, String> anyMap());
    }
 }
17
Robin Schürer

この場合の最も便利で適切なアプローチ(クライアント側REST RestTemplateを使用したテスト)は MockRestServiceServerSpring Testing フレームワークによって提供されます。

3

それはあなたが望むものに依存します。

モックを使用する1つの方法は、executeメソッドの呼び出しを簡単にすることです。そのために、HttpMethodHttpEntityなどの実際のパラメーターのモックバージョンを使用できます。基礎となるexchangeメソッドがこれらのパラメーターから特定の動作を必要とする場合、mockitoのwhen ... thenReturnメソッドでスタブする必要があるかもしれません。

executeメソッドを呼び出すことができるように、これらの模擬パラメーターがセットアップされたら、その結果が正しいことを確認する必要があります。

返された値を確認するには、従来のJUnitアサーションを使用できます。

さらに、特定のinteractionsがモックされたオブジェクトと実際に行われたことを確認することもできます。そのためには、mockitoのverifyメソッドを使用して、たとえば、いくつかのHttpEntityメソッドが実際に呼び出されることを確認できます。

技術的には、restテンプレートのexchangeメソッドが呼び出されることを確認することもできます。そのためには、RestTemplateをモックし、テスト対象のクラスにモックを挿入する必要があります。その後、mockitoのverfiyを使用して、exchangeが適切な方法で呼び出されることを確認できます。これは通常、特にテスト対象のクラスでテストするメソッドがさらにある場合に実行するのが賢明なことです。しかし、現在のexecuteメソッドでは、少しやり過ぎに見えます。

0
avandeursen