2009-07-06 12 views
10

Aktualizacja:Najlepsze praktyki dla HttpContext i sprawdzalne kontrolery w ASP.NET MVC

oparciu o kilka odpowiedzi, które otrzymałem, po prostu chcę, aby wyjaśnić, że jestem dobrze wie, jak go o wyśmianie HttpContext przy użyciu szyderczego frameworka. Jestem bardziej zainteresowany wiedząc, jakie są plusy i minusy z szyderstwa HttpContext w porównaniu do korzystania z klas wrapper wokół HttpContext.


szukam opinii na temat sposobów radzenia sobie z HttpContext przy budowie sprawdzalne kontrolery w ASP.NET MVC. Po zapoznaniu się z nim wydaje się, że istnieją dwie szkoły myślenia - albo kompilacja z HttpContextBase i używanie szyderczego frameworku do generowania potrzebnych skrótów/mocków do testowania twojej jednostki lub budowania agnostycznych klas otoki wokół obszarów HttpContext, które zamierzasz użyć .

W tej chwili jestem skłonny do budowania off HttpContextBase. Wydaje się, że jest to zarówno szybszy proces tworzenia, jak i łatwiejszy w utrzymaniu, ponieważ nie trzeba poświęcać czasu na rozwijanie i utrzymywanie dodatkowych klas opakowania. Widzę, w jaki sposób klasy opakowujące mogą być korzystne, ponieważ oddzielają podstawową implementację i utrzymują kontekst kontrolera oddzielnie od żądania - ale nie jestem pewien, czy jest to warte dodatkowych kosztów instalacji i utrzymania.

Co sądzisz o zaletach i wadach między tymi dwoma podejściami i kiedy wybierzesz jedną z nich? Czy istnieją pewne rodzaje rozwoju, które nadają się do jednego z rozwiązań bardziej niż inne?

Wygląda na to, że większość osób, które testują jednostki i używają ASP.Net MVC, musi poradzić sobie z tym, jak byś poradził sobie z tym problemem? Jeśli rozwiązałeś ten problem, jak działało twoje rozwiązanie i co zrobiłbyś teraz inaczej?

Odpowiedz

6

Przechodzę w stronę HttpContextBase. Głównie dlatego, że myślę, że został wynaleziony właśnie z tego powodu: testowalność. I po co wymyślać nowe koło, gdy już istnieje akceptowalne rozwiązanie.

Jeśli dużo wysiłku włożysz w klasach otoki wokół HttpContext, by skończyć z czymś bardzo podobnym do HttpContextBase ...

1

Do testowania używam Rhino.Mocks. Aby ustawić HttpContext w kontrolerze, po prostu wyśmiałem go. Więc mój system badanego (lub SUT), jest coś takiego jak:

  Controller controllerBase = sut as Controller; 

I potem kpić z kontekstu kontrolera i skonfigurować kontekst w kontekście kontrolera zwrócić makiety klasy HttpContextBase (jak wspomniano powyżej). Mój kod wygląda tak:

controllerContext = AMockOf<ControllerContext>(); 

// Add the test HttpContextBase to the controller context 
HttpContextBase httpContextBase = SetUpTestHttpContext(); 
WhenThe(controllerContext).IsAskedForIts(x =>x.HttpContext).Return(httpContextBase).Repeat.Any(); 

W przypadku innych obiektów czasami używam również podróbek.

+0

Jak ma doświadczenie było z tej konfiguracji? Czy uważasz, że jest to możliwe do utrzymania, działające itp.? –

+0

Tak, to działa bardzo dobrze dla mnie. Sztuką jest ukrywanie wszystkiego w klasie bazowej, z której dziedziczą klasy testowe, więc robisz to raz i nie musisz się o to martwić ponownie. – Erik

Powiązane problemy