Из стандартного метода LogOn в контроллере учетных записей в приложениях MVC3, как я могу проверить
Url.IsLocalUrl(returnUrl.ToString())
строка кода, где URL не является локальным? Другими словами, какой URL-адрес нужно указать в этой строке кода при модульном тестировании, чтобы он возвращал значение 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
, что он возвращает false на Url.IsLocalUrl
и не выдает исключение
Дальнейшее редактирование:
Я использую тестовый помощник MvcContrib, который неплохо умеет насмехаться над многими httpcontext и веб-материалами:
Builder = new TestControllerBuilder();
UserController = new UserController();
Builder.InitializeController(UserController);