我正在實現一個使用DotNetOpenAuth CTP庫的oauth提供程序。因此,我創建了一個mvc3應用程序,該應用程序具有一個OAuth控制器,其中包含3個方法,用於授權第三方應用程序。控制器有一個IOAuthService,它封裝了庫爲完成某些任務而必須執行的所有邏輯,但是,服務方法返回保護其構造函數的DotNetOpenOAuth對象。單元測試dotnetopenauth ctp
我想測試我的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;
}
}
我想測試,每當第三方應用程序沒有權限,視圖會彈出用戶請求他允許授權的應用程序。 FOT這個我需要模擬:
- _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個,他們有類似的情況。
好的,我可以試試! – Daniel 2012-01-18 16:55:38