gpt4 book ai didi

java - 如何对经过 oauth 的 Controller 进行单元测试?

转载 作者:行者123 更新时间:2023-12-02 08:36:47 25 4
gpt4 key购买 nike

我喜欢 Spring MVC,因为你可以对你的 Controller 进行单元测试。

但是测试 oauth Controller 是另一回事。例如,如果我想获取授权 url,因为我想 Oauth 到 GData,我就必须部署网络应用程序,因为 Google 只会接受来 self 的域(我的网络应用程序的 url)的授权请求,而不是我的开发环境其域名为 localhost:8080。

所以现在我测试代码是否有效的唯一方法是部署代码并打印出我需要打印的数据。

我的 Controller ,这是一个多操作 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);
}

提供者代码,我所有的依赖项都被注入(inject)

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;
}

最佳答案

听起来你有一个组件(一个 Controller )在做多项事情。

我会把它分成

  1. Controller
  2. 与 Google 通信的 OAuth 服务

后者应该被注入(inject)到您的 Controller 中,就像 Spring 中的其他所有内容一样。

这允许您在单元测试中模拟 OAuth 组件返回不同值时 Controller 的行为。

要实际测试与 Google 的集成,您可以做两件事:

  1. 解析 Google OAuth 响应的服务的单元测试 - 模拟执行实际消息传输的代码,以便您可以测试当 google 返回某种类型的 XML 时消息解析器的行为方式(我假设这是使用 XML 完成,但无论技术如何,都适用相同的原则)与其他类型。
  2. 对向 Google 发送和接收的组件进行实际集成测试 - 由于您提到的限制,这可能会更困难。

因此,即使它们限制对某些域的访问,您也可以对难题的大部分部分进行单元测试,并且希望只有一小部分必须“在野外”进行测试。

或者,您可以为测试环境中的域注册不同的帐户吗?无论哪种方式,您仍然应该将此代码分解为更小的组件。

关于java - 如何对经过 oauth 的 Controller 进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1467627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com