【发布时间】:2012-01-19 23:23:30
【问题描述】:
我正在使用 DotNetOpenAuth CTP 库实现一个 oauth 提供程序。所以我创建了一个 mvc3 应用程序,它有一个 OAuth 控制器,里面有 3 个方法,目的是授权第三方应用程序。控制器有一个 IOAuthService,它封装了库为完成某些任务必须执行的所有逻辑,但是,服务方法返回的 DotNetOpenOAuth 对象的构造函数受到保护。
我想测试我的 OAuthController 中方法的行为,为此,我试图模拟我的服务方法,但我无法做到这一点。我必须告诉 moq 库我期望服务方法返回什么类型的对象,并且由于我无法访问这些对象的构造函数,因此我无法对我的控制器方法执行测试。
控制器:
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;
}
}
我想测试一下,每当第三方应用程序没有授权时,都会弹出一个视图,要求用户授权该应用程序。我需要嘲笑这个:
- _oAuthService.RequestClientAuthorization
我的测试方法的设置将如下所示:
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:对于这个问题,我只写了一个控制器方法,但有3个,它们的场景相似。
【问题讨论】:
标签: c# asp.net-mvc dotnetopenauth