2016-06-13 24 views
4

私は、ヘルパークラスのメソッドをテストするJUnitテストケースを作成しようとしています。このメソッドは、RESTを使用して外部アプリケーションを呼び出します.JUnitテストで模擬しようとしているのはこの呼び出しです。MockRestServiceServerを使ってREST呼び出しをモックする

ヘルパーメソッドは、SpringのRestTemplateを使用してREST呼び出しを行います。

@Before 
public void setUp() throws Exception { 
    mockServer = MockRestServiceServer.createServer(helperClass.getRestTemplate()); 
} 

ヘルパーメソッドを作るとき、それは適切な応答を返すべきであるように、私は、モックサーバーをシード:、私はモックRESTサーバとモックRESTテンプレートを作成し、このようにそれらをinstanitiate私のテストで

REST呼び出し:私は私のテストを実行すると

// response is some XML in a String 
mockServer 
    .expect(MockRestRequestMatchers.requestTo(new URI(myURL))) 
    .andExpect(MockRestRequestMatchers.method(HttpMethod.GET)) 
    .andRespond(MockRestResponseCreators.withStatus(HttpStatus.OK) 
     .contentType(MediaType.APPLICATION_XML) 
     .body(response)); 

は、ヘルパーメソッドはREST落札呼び出し、テストが失敗したからヌル応答を受け取ります。

ヘルパーが行うREST URLにはクエリパラメータがあり、 "http://server:port/application/resource?queryparam1=value1&queryparam2=value2"のようになります。

私は(それが応答を返すように試合を引き出すために) 『myURL』変数にクエリパラメータなしの両方とURL(「http://server:port/application/resource」)を入れて試してみたが、モックを得ることができませんサーバーは何かを返す。

私はこの種のコードの例を検索しようとしましたが、私のシナリオに似ているようなものはまだ見つけていません。

春バージョン4.1.7。

ありがとうございました。

+0

Tha他の多くのソースとは異なり、静的メソッドにクラスを書き込むためのものです。 'requestTo'です。 – sjngm

答えて

6

MockRestServiceServerのインスタンスを作成するときは、運用コードで使用されている既存のインスタンスRestTemplateを使用する必要があります。したがって、RestTemplateをテストに注入して、MockRestServiceServer.createServerを呼び出すときにそれを使用してみてください - あなたのテストに新しいRestTemplateを作成しないでください。

+0

問題は私の間違いでした。私はあなたの提案に応じて適切にインスタンス化されたものではなく、テスト用の嘲笑RestTemplateオブジェクトを使用していました。これが置き換えられると、テストは正常に実行されました。 – GarlicBread

+0

私はRestTemplateのテストにも問題があります。しかし、私の場合、私はRestTemplateインスタンスにアクセスすることはできません。私のヘルパークラスのコードは 'new RestTemplate()。exchange(uri、HttpMethod.GET、...)'のようなものです。どのように私はこれをテストすることができます。 –

4

残りのクライアントをテストしようとしているようですが、残りのサーバーは別の場所でテストする必要があります。 RestTemplateを使用しています - >サービスを呼び出す。次に、RestTemplateとその呼び出しの結果をモックしようとしました。

@Mock 
RestTemplate restTemplateMock; 

及びサービスの下で、テストクラス

@InjectMocks 
Service service; 

はサービスがfilterDataメソッドをテストするために、次に

public void filterData() { 
    MyResponseModel response = restTemplate.getForObject(serviceURL, MyResponseModel.class); 
    // further processing with response 
} 

としてテストすべきメソッドを持っている、あなたが応答を模擬する必要がある、としましょう休憩からテンプレート呼び出しなど

mockResponseModel = createMockResponse(); 
Mockito.when(restTemplateMock.getForObject(serviceURL, MyResponseModel.class)).thenReturn(mockResponseModel); 

service.filterData(); 
//Other assert/verify,... go here 
関連する問題