тестирование ASP.NET MVC контроллера Httpget - PullRequest
2 голосов
/ 01 февраля 2012

Мы только начали использовать ASP.NET MVC3 и хотим провести модульное тестирование нашего контроллера.

Вот моя функция контроллера:

[HttpGet]
Public ActionResult Action()
{
  Guid Id = Guid.Empty;
            string[] UrlSegments = Request.Url.Segments;
            Guid.TryParse(UrlSegments[UrlSegments.Count() - 1], out Id);
            if(Id == Guid.Empty)
                return RedirectToAction("ErrorPage");
  }

Я хочу протестировать эту функцию контроллера. Я поместил соответствующий маршрут для соответствия этой функции в моем файле global.asax. В основном я пытаюсь получить guid из URl, и если это не хорошо, то перевести его на страницу с ошибкой. Класс HttpRequestBase URl не является установщиком, поэтому я не понимаю, как проверить эту функциональность?

1 Ответ

0 голосов
/ 07 февраля 2013

Что касается тестирования, прочитайте ссылку, приведенную в комментариях выше , но я бы порекомендовал почитать MVC Routing или здесь , он делает именно то, что выпытаются достичь.

Загляните в свой файл global.ascx.cs, вы найдете что-то вроде этого:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

Это готовый маршрут для инфраструктуры MVC.

Маршруты будут соответствовать URL-адресу в соответствии с соглашением, которое вы им дали.

Таким образом, на основе маршрута по умолчанию, приведенного выше, и с URL-адресом, подобным следующему:

http://localhost:portnumber/MyController/MyAction/8B4B93DE-76CA-4552-B4AA-460400761EAD

Этопопытается сопоставить этот URL с контроллером MyController с действием MyAction, которое получает и Id.Это действие будет выполнено только в том случае, если все критерии соответствуют.

Если в URL нет идентификатора, а идентификатор, определенный в вашем методе действия, не имеет типа null, то он просто не будет выполняться.Он скорее попытается сопоставить другой URL, если он не может найти тот, который даст 404.

Примерно так:

public class MyController : Controller {

    [HttpGet]
    Public ActionResult MyAction(Guid id)
    {

    }  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...