- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 DotNetOpenAuth CTP 库实现一个 oauth 提供程序。所以我创建了一个 mvc3 应用程序,它有一个 OAuth Controller ,其中有 3 个方法,目的是授权第三方应用程序。 Controller 有一个 IOAuthService,它封装了库为完成某些任务必须执行的所有逻辑,但是,服务方法返回 DotNetOpenOAuth 对象,其构造函数受到保护。
我想测试我的 OAuthController 中方法的行为,为此,我试图模拟我的服务方法,但我无法做到这一点。我必须告诉 moq 库我期望服务方法返回什么类型的对象,并且由于我无法访问这些对象的构造函数,所以我无法对我的 Controller 方法执行测试。
Controller :
public class OAuthController : Controller
{
private readonly IOAuthService _oAuthService;
public OAuthController(IOAuthService oAuthService)
{
_oAuthService = oAuthService;
}
[Authorize, AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)]
public ActionResult Authorize()
{
ClientApplication requestingClient;
var request = _oAuthService.ReadAuthorizationRequest();
if (request == null)
{
throw new HttpException((int)HttpStatusCode.BadRequest, "Missing authorization request.");
}
var response = _oAuthService.RequestClientAuthorization(GetIdentity().Name, out requestingClient, request);
if (response != null)
{
return response.AsActionResult();
}
var model = new AuthorizeClientApplicationViewModel
{
ClientApplication = requestingClient.Name,
Scope = request.Scope,
AuthorizationRequest = request,
};
return View(model);
}
public virtual IIdentity GetIdentity()
{
return User.Identity;
}
}
我想测试一下,每当第三方应用程序没有授权时,都会向用户弹出一个 View ,请求他授权该应用程序。为此我需要 mock :
我的测试方法的设置将如下所示:
var oAuthService = new Mock<IOAuthService>();
oAuthService.Setup(a => a.RequestClientAuthorization(userName, out client, pendingRequest)).Returns(new OutgoingWebResponse()); // DotNetOpenAuth doesn't allow me to do the **new OutgoingWebResponse**
PD:这个问题我只写了一个controller的方法,其实有3个,而且场景都差不多。
最佳答案
一种可能性是编写一个包装器(与 ASP.NET MVC 抽象所有 HTTP 上下文特定内容的方式相同):
public abstract class OutgoingWebResponseWrapperBase
{
protected OutgoingWebResponseWrapperBase() { }
public abstract ActionResult AsActionResult();
}
然后有一个简单的实现:
public class OutgoingWebResponseWrapper: OutgoingWebResponseWrapperBase
{
private readonly OutgoingWebResponse _response;
public OutgoingWebResponseWrapper(OutgoingWebResponse response)
{
_response = response;
}
public override ActionResult AsActionResult()
{
return _response.AsActionResult();
}
}
现在修改 IOAuthService.RequestClientAuthorization
方法以返回 OutgoingWebResponseWrapperBase
而不是 OutgoingWebResponse
。
就这样:
public interface IOAuthService
{
...
OutgoingWebResponseWrapperBase RequestClientAuthorization(...);
}
显然,您的 Controller 代码将保持完全相同。只是现在您可以在单元测试中模拟 RequestClientAuthorization
的返回类型,因为它是一个抽象类。您还可以模拟 AsActionResult
抽象方法调用以返回一些预期的模拟实例,并且您将在单元测试中断言您正在测试的 Controller 操作返回了这个预期的操作结果。
关于c# - 单元测试 dotnetopenauth ctp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8913187/
我刚刚使用 Log4net 设置了一个日志记录提供程序,并在测试时注意到 DotNetOpenAuth 也在记录消息。他们一定也在使用 log4net,太棒了,我不希望每次有人使用 openID 登录
我正在尝试使用 DNOA 为我的应用程序提供 OpenId 支持,以便离开我迄今为止一直在使用的 Janrain 解决方案。问题是,到目前为止,我拥有的用户拥有基于个人资料的标识符(https://w
我只想使用 google 登录,并希望在我的网站上显示在用户的一般配置文件(如照片、电子邮件地址和姓名)中登录的访问权限。 DotNetOpenAuth 有可能吗? 最佳答案 这非常简单。使用 Ope
我目前正在从 Janrain engange (rpxnow) 切换到 dotnetopenauth。在我的数据库中,我将用户声明的标识符存储在表单中 https://www.google.com/a
我正在使用 Dotnetopenid 进行登录。 我正在使用 dotnetopenid 提供商登录我的应用程序(假设是 google)。 在注销时,我将通过 FormsAuthentication.S
您好, 我想将 ClaimedIdentifier 保存在数据库中。 它可以持续多久? 大概 255 个字符可以吗? 最佳答案 openid.claimed_id 仅受 URL 的最大长度限制,从技术
我刚刚开始将 DotNetOpenAuth 与 MVC 应用程序一起使用,我很难理解它的实际工作原理。 据我了解,DotNetOpenAuth 将负责使用 Google/Twitter/Faceboo
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
我正在通过dotNetOpenAuth Samples (OpenIdRelyingPartyMVC 和 OpenIdProviderMvc)并提出一个问题以更好地理解...... 例如,在依赖方应用
我正在为 OpenId 提供商和依赖方实现 DotNetOpenAuth。在这两种情况下,服务器都位于负载均衡器后面,因此对于任何 HTTP 请求,我们不能假设我们会访问同一服务器。 看来 DotNe
我有一个负载均衡器,后面有一些网络服务器。到达负载均衡器的流量通过 SSL 进行保护,并且从负载均衡器到 Web 服务器的数据作为未加密的 HTTP 流量发送。我在 Web 服务器上的负载均衡器后面使
我已经下载了与http://www.dotnetopenauth.net/关联的Visual Studio 2010模板。我可以像宣传的那样使它工作。我不是从头开始一个项目,也不想花很多时间将所有we
我正在尝试使用 ASP.NET MVC 实现 OpeinID 登录。我正在尝试按照 http://blog.nerdbank.net/2008/04/add-openid-login-support-
如果您从 Github 源构建,您会在检查签名程序集时遇到错误。 是否可以只更改: SignAssembly = false DelaySign = false 在 tools\DotNetOpenA
源代码托管在哪里? git 中心?我到处都找不到它。 最佳答案 是的,它与项目的其余部分一起位于 GitHub 上。它位于 master 分支下。 https://github.com/AArnott
我使用此页面(第一个示例)提供的代码创建了一个简单页面: http://www.dotnetopenauth.net/developers/code-snippets/programmatic-ope
我有以下代码: protected void Page_Load(object sender, EventArgs e) { var openId = new OpenIdRelyingPar
我知道 stackoverflow 使用 OpenID 身份验证。我也想尝试使用它。我正在使用带有 C# 的 asp.net mvc 2.0。 我找到了这个 http://www.dotnetopen
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
几天来,我一直在绞尽脑汁,试图使用 DotNetOpenAuth 从 Google 获取日历列表。 我可以使用 DotNetOpenAuth 示例成功获取联系人列表。我使用 OpenId+OAuth
我是一名优秀的程序员,十分优秀!