0

私はアンドロイドアプリのリクエストとレスポンスを模擬するためにmockwebserverを使用しています。私は、一連の4つのサービスコールを経由するログイン機能をテストしています。リダイレクトを含むmockwebserverを使ってサービスコールをテストするには?

  1. 私はモックしようとしているいくつかの他のもの(元のベースURL)

をゲットアクセストークン

  • 再直接のGetユーザー情報(異なるベース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); 
    
    関連する問題