2

テストしようとしているRESTサービスクライアントがあります。これは私がテストしようとしているクライアントメソッドです:

public RestPriceRow getPriceRow(String customer, String product, String qt)
    throws Exception {
    // Prepare acceptable media type
    List<MediaType> acceptableMediaTypes = new ArrayList<MediaType>();
    acceptableMediaTypes.add(MediaType.APPLICATION_XML);

    // Prepare header
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(acceptableMediaTypes);
    HttpEntity<PriceRowDto> entity = new HttpEntity<PriceRowDto>(headers);

    // Prepare response
    RestPriceRow res = new RestPriceRow();

    // Send the request as GET
    try {
        ResponseEntity<PriceRowDto> result =
          restTemplate.exchange(baseURL + "{customerId}/{productId}/{quantity}",
          HttpMethod.GET, entity, PriceRowDto.class, customer,product,qt);
        PriceRowDto response = result.getBody();
        return response;
    } catch (Exception e) {
        e.printStackTrace();
    }
}

そして、これは私のテストクラスです:

@Before
public void setUp() {
    RestTemplate r = mock(RestTemplate.class);
    restPriceService = new RestPriceServiceImpl();
    restPriceService.setRestTemplate(r);
    restPriceService.setBaseURL("url");
}

@Test
public void prueba() {
    PriceRowDto r = new PriceRowDto("100","200","9","10","0","19/11/2012");
    try {
        when(restPriceService.getPriceRow("100","200","16")).thenReturn(r);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

私の問題は、このテストを実行するとNullPointerException、実行時にがスローされることresult.getBody()です。(結果はnullです)

4

2 に答える 2

4

SUT(テスト対象システム)をモックされたコラボレーターと混同しました。SUTはあなたがテストする方法です。コラボレーターは、SUTが機能するために必要に応じて、データを再生して返します。

  1. RestPriceServiceテストするインスタンスを呼び出しますsutTODO
  2. モックrestTemplateOK
  3. このモックに次のように目立つ名前を付けますrestTemplateMockTODO
  4. オンに設定sutOK
  5. 使用when(restTemplateMock.exchange(...).thenReturn(r)TODO
  6. 電話sut.getPriceRowTODO
  7. RestPriceRowこの呼び出しによって返されたものが正しいことを確認します: TODO
  8. 確認restTemplateMockTODO

編集:

ユニットテストのさまざまな形式に関する非常に優れた本を読みたい場合は、 XUnitテストパターンをお勧めします。

于 2012-10-23T14:03:00.347 に答える
0

したがって、ここには2つの問題があります。RESTインターフェースをテストする場合、つまり呼び出しを行って結果を確認し、それを確認する場合は、JerseyTestフレームワークを使用することをお勧めします。テストサーバー上で実行され、多くの作業を節約できます。(Jerseyを使用していると仮定します。)

http://jersey.java.net/nonav/documentation/latest/test-framework.html

ただし、サービスレイヤーをテストするだけの場合は、通常のjunitテストを作成できます。

于 2012-10-23T14:02:06.777 に答える