【发布时间】:2026-02-18 22:35:01
【问题描述】:
从 MVC3 应用程序中帐户控制器中的标准 LogOn 方法,我该如何测试
Url.IsLocalUrl(returnUrl.ToString())
url 不是本地的代码行?换句话说,在单元测试时我必须在这行代码中输入什么 url,才能让它返回 false?
我使用了以下想法,这将返回为 false(非本地):
Uri uri = new Uri(@"http://www.google.com/blahblah.html");
但它只是在单元测试中抛出了一个空异常
编辑:我应该补充一点,LogOn 方法现在看起来像这样:
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 参数,但它与标准原始参数非常相似。
只是为了澄清,在单元测试中-我想测试并断言点击Else 行的结果,它重定向到Home/Index,所以我需要将一些东西传递给(System.Uri)returnUrl,这将使它在 Url.IsLocalUrl 上返回 false 并且不抛出异常
进一步编辑:
我正在使用 MvcContrib testhelper,它非常擅长模拟很多 httpcontext 和 web 东西:
Builder = new TestControllerBuilder();
UserController = new UserController();
Builder.InitializeController(UserController);
【问题讨论】:
标签: asp.net-mvc-3 url local returnurl