2009-08-13 10 views
12

Szukałem dodatkowych sposobów testowania aplikacji ASP.NET MVC i wpadłem na numer Stevena Sandersona MvcIntegrationTestFramework. Podejście to wygląda obiecująco, ale zastanawiałem się, czy ktoś ma jakiekolwiek rzeczywiste doświadczenie.Czy ktoś użył MVcIntegrationTestFramework Steve Sandersona?

+0

Jeszcze go nie używałem, ale pomysł odłączenia przeglądarki od testu integracji jest bardzo atrakcyjny. –

+0

Ale dla mnie integracja oznacza integrację warstw. A przeglądarka (szczególnie javascript i ajax) jest rzeczywiście warstwą, która powinna zostać przetestowana. –

+0

Cześć James. To na pewno należy zrobić, ale z mojego doświadczenia trudno jest zautomatyzować i ze względu na różnice w przeglądarkach trzeba to zrobić dla wielu z nich. Nie jest to więc zamiennik, ale dodatek do testów przeglądarki. I przydatne do wyszukiwania regresji. – Maurice

Odpowiedz

7

Mam naprawdę dobre wyniki. Nie obchodzi mnie, co ktoś tutaj mówi o potrzebie przetestowania wyświetleń, gdy tylko dodasz pierwszy wiersz kodu do widoku, nawet jeśli kod jest ściśle związany z prezentacją, wprowadzasz potencjał błędów, dla których dobrym pomysłem byłoby napisanie testów automatycznych. Moim głównym celem jest złapanie jak największej liczby wyjątków/błędów białego ekranu i żółtego ekranu. Aby to zrobić Używam fragment od Stevena wprowadzającym poście, aby upewnić się, że strona wygenerowana właściwie bez rzucania żadnych wyjątków:

Assert.IsTrue(result.ResponseText.Contains("<!DOCTYPE html")); 

Małe pułapek, które widzę z tym kontekście może być:

  • Jeśli twoja strona internetowa wykonuje dość skomplikowane powiązanie modelu między widokami i metodami działania, może się zdarzyć, że utworzysz całkiem duże wartości NameValueCollections, takie jak w tym przykładzie (metoda akcji, która faktycznie bierze obiekt modelu widoku LogonModel), ponieważ nie widzą żadnego sposobu przekazywania złożonych typów obiektów modelu widoku do swoich metod działania za pomocą tej struktury:

var result = browsingSession.ProcessRequest("/account/logon", HttpVerbs.Post, new NameValueCollection { {"UserName","myName"}, {"Password", "myPassword"}, {"returnUrl", "/home/myActionMethod"} });

  • Wykonywanie browsingSession.ProcessRequest („URL”) tworzy aplikację hosta/kontekst, który faktycznie wykonuje kod internetową, która jest testowane za pomocą konfiguracji w projekcie którego jest testowane. Oznacza to, że testy przebiegają nieco wolniej i mogą modyfikować prawdziwe dane, ponieważ nie widzę szybkiego i łatwego sposobu na zamianę repozytoriów dostępu do danych w testowanym projekcie WWW za pomocą fałszywych wersji za pomocą dowolnego obiektu wbudowanego w to ramy testowe. Innymi słowy, prawdopodobnie będziesz musiał przetasować swój własny, korzystając z niektórych metod opartych na web.config.
+0

Kontynuacja - zdecydowanie polecam przejście do MVC3 i użycie RazorGenerator. Możesz jednocześnie uruchamiać MVC2 i MVC3, migrując pojedyncze strony internetowe, które sprawdziły się bezproblemowo. Chociaż struktura Steve'a Sandersona działa dobrze w obrębie ograniczeń MVC2, okazało się, że niezwykle trudno jest zarządzać zmianami w mocno zakodowanych ścieżkach plików, które były niezbędne podczas korzystania z frameworka testowego na naszych urządzeniach dev vs. na naszej C.I. serwer. Ten problem nie występuje w RazorGenerator + MVC3. –

+1

Dzięki za obserwację! Czy możesz krótko wyjaśnić, w jaki sposób RazorGenerator pomógł Ci zastąpić MvcIntegrationTestFramework w testach integracyjnych? W jaki sposób pomaga w tym prekompilacja poglądów maszynki Razor? Może blogowałeś o tym :-) – Oliver

0

Nie korzystałem z tej platformy. Ale bazując na moim doświadczeniu z czytania jego książki - Pro ASP.NET MVC Framework i innej konstrukcji walidacyjnej opracowanej przez niego, powiedziałbym "JEST WIELKI".

+0

Bardzo podoba mi się też jego książka. Właściwie to mam teraz kopię obok mnie. – Maurice

0

Eksperymentował z nim trochę i może być bardzo przydatny w niektórych sytuacjach. Generał kciuki i gdybym zobaczył dalsze prace nad tym, skorzystałbym z przyszłego projektu.

Nie kontynuowałem, ponieważ już mam WatIn konfigurowanie i dbanie o niektóre rzeczy, których nie chciałbym ponownie rozwiązać w tym kontekście. Na przykład. uwierzytelnianie za pomocą okna dialogowego, które prawdopodobnie wymagałoby zmiany kodu.

1

Po lekturze ardave's answer jakiś czas temu udaliśmy się wypróbować to dla naszej nowej aplikacji Marinas.info opartej na Orchard.

Przede wszystkim polecam każdemu, aby zaczął od rozwidlenia this version, ponieważ jest jeszcze łatwiej ustawić niż oryginał.

Dla każdej "normalnej" aplikacji MVC3 po prostu działa. Niestety, razem z Orchardem nie grało to dobrze, przynajmniej nie z niezmodyfikowaną wersją ich Global.asax.cs. Więc nadal byliśmy w stanie browser based testing road, ale używamy go do wykonywania poleceń Orchard wewnątrz aplikacji, która jest wystarczająco szybka.

Powiązane problemy