2016-09-27 11 views
0

mockwebserver를 사용하여 내 안드로이드 앱에 대한 요청 및 응답을 모의합니다. 일련의 4 가지 서비스 호출을 거치는 로그인 기능을 테스트하고 있습니다.리디렉션이 포함 된 mockwebserver를 사용하여 서비스 호출을 테스트하는 방법은 무엇입니까?

  1. 얻기 액세스 토큰
  2. 다시 직접
  3. 가져 오기 사용자 정보 (다른 기본 URL)
  4. 다른 물건 (원래 기본 URL)

내가 조롱하려고 받기 리디렉션 된 통화의 응답. 여기 내 코드 :

@Test 
public void testSuccessfulLogin() throws Exception { 
    // Post 
    server.enqueue(new MockResponse() 
      .setResponseCode(HTTP_OK) 
      .setBody(getStringFromFile(getInstrumentation().getContext(), "access_token.json"))); 

    // Redirect 
    server.enqueue(new MockResponse().setResponseCode(HTTP_MOVED_TEMP)); 

    // GET user info 
    server.enqueue(new MockResponse().setResponseCode(HTTP_OK).setBody(getStringFromFile(getInstrumentation().getContext(), "userinfo.json"))); 

    // GET some other stuff 
    server.enqueue(new MockResponse().setResponseCode(HTTP_OK) 
      .setBody(getStringFromFile(getInstrumentation().getContext(), "sts.json"))); 

    // Init call 
    loginWithoutWaiting(Data.serviceLoginUsername, Data.serviceLoginPassword); 

    // Debug (need to loop 4 times to get all 4 call paths) 
    RecordedRequest request = server.takeRequest(); 
    request.getPath(); 
} 

리디렉션 코드에서 내 테스트가 실패합니다. 나 로그인 할 수 없어. here 몇 가지 힌트를 찾았지만 무슨 일이 벌어지고 있는지 완전히 이해하지 못해서 현재로서는 제대로 작동하지 않습니다.

답변

0

꽤 쉽습니다. 리디렉션을 호출하는 경우 응답 코드 302와 위치 URL이 포함 된 새로운 조롱 된 응답을 만드십시오. 다음 호출은 해당 위치 URL을 사용합니다.

case "/userinfo": 
return new MockResponse().setResponseCode(HTTP_MOVED_TEMP).setHeader("Location", "/api-test.com/users"); 

case "/api-test.com/users": 
return new MockResponse().setBody("{}")).setResponseCode(HTTP_OK);