[ Log On ]

Testiranje ruta

Posted by frennky on 7/17/2011 @ 11:36 PM in Quality Assurance

ASP.NET MVC framework je osmišljen tako da može lako da se testira. Medutim, u nekim slucajevima testiranje MVC aplikacije može biti složeniji posao.

Mehanizam za rutiranje se direktno oslanja na ASP.NET i napravljen je tako da radi i sa ASP.NET WebForms i sa ASP.NET MVC framework-om. Zbog toga je za testiranje ruta potrebno kreirati dosta Mock objekata. Iako ovo nije teško uraditi, može da bude iscrpljujuće.

Na svu sreću postoji bibiloteka koja pomaže u instanciranju kontrolera i pravilnom inicijalizovanju njegovih članica:

  • HttpContext
  • HttpRequest
  • HttpResponse
  • HttpSession
  • Form
  • TempData
  • QueryString
  • ApplicationPath
  • PathInfo
  • itd.

U okviru Codeplex projekta MvcContrib postoji biblioteka TestHelper koja sadrži sve što nam je potrebno za testiranje ruta. MvcContrib TestHelper može da se doda u test projekat kao NuGet paket:

PM> Install-Package MvcContrib.Mvc3.TestHelper-ci

Nakon što smo dodali referencu na TestHelper biblioteku, potrebno je da učitamo rute. To ćemo učiniti u okviru ClassInitialize metode:

[ClassInitialize]
public static void MyClassInitialize(TestContext testContext)
{
    RouteTesting.Demo.MvcApplication.RegisterRoutes(RouteTable.Routes);
}

Sada možemo da pišemo testove za rute:

[TestMethod]
public void GET_Account_LogOn()
{
    "~/Account/LogOn".ShouldMapTo<AccountController>(ac => ac.LogOn());
}

[TestMethod]
public void POST_Account_LogOn()
{
    "~/Account/LogOn".WithMethod(HttpVerbs.Post).ShouldMapTo<AccountController>(ac => ac.LogOn(null, null));
}