0

コントローラーの単体テストができるので、Spring MVC が好きです。

ただし、oauth するコントローラーをテストすることは別のことです。たとえば、GData に対して Oauth を実行するために認証 URL を取得したい場合、Google は開発環境ではなくドメイン (Web アプリの URL) からの認証要求のみを受け入れるため、Web アプリをデプロイする必要があります。そのドメインは localhost:8080 です。

したがって、現在、コードが機能するかどうかをテストしている唯一の方法は、コードを展開し、印刷する必要があるデータを印刷することです。

マルチアクションコントローラーであるMy Controller

public ModelAndView authorize(HttpServletRequest request,
HttpServletResponse response) {

        Provider provider = getProvider(request.getAttribute("provider"));
        String authUrl = provider.getAuthUrl();     
        page.put("authUrl", authUrl);
        return new ModelAndView("setup","model",page);
}

プロバイダー コード、すべての依存関係が注入されます

public String getAuthUrl()
{
    oAuthParameters.setScope("http://docs.google.com/feeds/");          
    try {
       oAuthHelper.getUnauthorizedRequestToken(oAuthParameters);
    } catch (OAuthException e) {
        page.put("authUrl", CANNOT_CONNECT_TO_GOOGLE);
    }
    String oAuth_Callback="[callback url]";
    try {
        oAuth_Callback.concat("?oauth_token_secret=").concat(
            java.net.URLEncoder.encode
           (oAuthParameters.getOAuthTokenSecret(), "UTF-8"));
    } catch (UnsupportedEncodingException e) {
        page.put("authUrl",INTERNAL_ERROR);
    }

    oAuthParameters.setOAuthCallback(oAuth_Callback);
    String authUrl = oAuthHelper.createUserAuthorizationUrl(oAuthParameters);
    return authUrl;
}
4

1 に答える 1

2

1つのコンポーネント(コントローラー)が複数のことを実行しているようです。

私はこれを壊します

  1. コントローラー
  2. Googleと通信するOAuthサービス

後者は、Springの他のほとんどすべてと同様に、コントローラーに注入する必要があります。

これにより、単体テストで、OAuthコンポーネントがさまざまな値を返したときのコントローラーの動作をモックアウトできます。

Googleとの統合を実際にテストするには、次の2つのことができます。

  1. Google OAuth応答を解析するサービスの単体テスト-実際のメッセージ転送を行うコードをモックアウトして、Googleが特定のタイプのXMLを返したときにメッセージパーサーがどのように動作するかをテストできるようにします(これはXMLで行われると想定しています) 、ただし、同じ原則がテクノロジーに関係なく適用されます)と別のタイプ。
  2. グーグルとの間で送受信するコンポーネントの実際の統合テスト-あなたが言及した制限のために、これはより難しいかもしれません。

したがって、特定のドメインへのアクセスが制限されている場合でも、パズルのほとんどのピースを単体テストできます。できれば、テストする必要のある小さなセグメントを1つだけにすることができます。

または、テスト環境のドメインに別のアカウントを登録できますか?いずれにせよ、このコードをより小さなコンポーネントに分割する必要があります。

于 2009-09-23T18:53:11.900 に答える