从在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