從在MVC3應用帳戶控制標準的登錄方法,我怎麼能測試單元測試Url.IsLocalUrl(returnUrl.ToString()),我怎麼能得到它在單元測試中返回false?
Url.IsLocalUrl(returnUrl.ToString())
行代碼,其中的網址是不是本地的?換句話說,當單元測試時,我需要將哪些網址送入此代碼行,才能讓它返回false?
我用下面想這將返回假(非本地):
Uri uri = new Uri(@"http://www.google.com/blahblah.html");
,但它只是扔在單位空異常測試
編輯:我要補充的是,登錄方法現在看起來是這樣的:
public ActionResult LogOn(LogOnModel model, System.Uri returnUrl)
if (ModelState.IsValid) {
bool loggedOn = LogOn(model);
if (loggedOn) {
if (Url.IsLocalUrl(returnUrl.ToString())) {
return Redirect(returnUrl.ToString());
}
else {
return RedirectToAction("Index", "Home");
}
}
else {
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(viewModel);
}
被迫從字符串參數的System.Uri參數改變,但它是非常相似的TH一些風格COP /代碼分析錯誤e標準原件。
只是爲了澄清,在單元測試 - 我想測試並斷言擊中Else
行,其中它重定向到Home/Index
的結果,所以我需要傳遞的東西進入(System.Uri)returnUrl
,這將使它在Url.IsLocalUrl
返回false而不是拋出一個異常
進一步編輯:
我使用MvcContrib testhelper,這是在嘲諷了很多的HttpContext和網絡的東西還不錯:
Builder = new TestControllerBuilder();
UserController = new UserController();
Builder.InitializeController(UserController);
對不起達林我應該還補充說我使用MvcContrib TestHelper,見上編輯。相當新,但我認爲它涵蓋了很多嘲諷問題..? – DevDave 2012-02-27 10:50:55
@泰勒,的確,你應該在你的問題中提到這一點。我已經更新了我的答案,以提供如何使用MvcContrib.TestHelper來實現這一目標的示例。 – 2012-02-27 10:56:49
@Tyler,'new Uri(「google.co。uk「)'是一個無效的uri,它會拋出'UriFormatException'。你需要指定協議。 – 2012-02-27 11:47:07