针对.net中启用Oauth2的API自动执行单元测试

时间:2014-08-26 16:19:22

标签: c# .net unit-testing oauth-2.0

我有一个使用anotther API(例如google calendar API)的API,该API通过OAuth 2进行身份验证。

httpRequest => MyApi under test => uses external Oauth2 enabled API

如果“启用Oauth2的API”使用HTTP基本身份验证,我可以在某处硬编码用户名和密码来测试应用程序。 (在外部APP中创建的公开我正在使用的API的测试用户的用户名和密码)

与Oauth2一样,我们要求用户同意(用户通常会被重定向到网页(同意屏幕),询问他是否允许应用通过API访问其数据。)。

我只是想创建一个简单的单元测试:例如,我的Api在谷歌日历中创建一个事件,然后删除它进行清理,但没有人为干预...

这可能吗?如何?

2 个答案:

答案 0 :(得分:2)

如果您正在开发API,那么您的测试应仅针对该API。您不对外部Oauth2 API所做的工作负责,该API的作者是。只测试你自己的代码。

这意味着,如果可能的话,你应该找到一种模拟外部API调用的方法。

答案 1 :(得分:0)

我一直在想自己做这件事的最佳方法。 到目前为止,我已经找到了一些选择:

  1. 使用password授予类型来验证用户身份。显然,按照最佳做法,我们不再建议这样做,但 是针对最终用户的。不用于测试。
  2. 使用client_credentials授予类型来认证为应用程序本身。这样做的问题在于,如果您的测试依赖于能够检索用户数据,那么除非您事先进行操作,否则该应用程序将不会与自身相关联。
  3. 请求refresh_token,以重新验证为先前通过身份验证的用户。这是通过请求offline_access范围来完成的。用户将必须进行第一次身份验证,获取刷新令牌并为其提供测试脚本。这样,脚本每次运行时都必须能够使用新的刷新令牌来保持自身更新。如果刷新令牌在下一次运行之前到期,则将再次需要人工干预。
  4. 使用device_code授予类型在其他地方轮询最终用户的同意。这就像YouTube用于配对SmartTV的方式一样,您可以在SmartTV上开始登录并在移动设备上使用配对代码同意登录。在这里,至少对于第一次同意,还需要人工干预,至少在第一次同意之后,然后在同意终止时再次进行。