我喜欢Spring MVC,因为你可以对你的控制器进行单元测试。
但测试控制器oauth是另一回事。例如,如果我想获得授权网址,因为我想要Oauth到GData,我将不得不部署网络应用程序,因为Google只接受来自我的域(我的网络应用程序的网址)的授权请求,而不是我的开发环境其域名是localhost:8080。
所以现在我测试代码的唯一方法是部署代码并打印出我需要打印的数据。
我的控制器,这是一个多动作控制器
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;
}
答案 0 :(得分:2)
听起来你有一个组件(控制器)在做多件事。
我会将其分解为
后者应该注入你的控制器,就像Spring中的其他所有内容一样。
这允许您在单元测试中模拟控制器在OAuth组件返回不同值时的行为方式。
为了实际测试与Google的集成,您可以做两件事:
因此,即使他们限制对某些域的访问,您也可以对拼图的大部分内容进行单元测试,并且希望只有一个必须“在野外”进行测试的小段。
或者,您是否可以在测试环境中为域注册其他帐户?无论哪种方式,您仍应将此代码拆分为更小的组件。