2013-07-15 8 views
5

Pytanie (s)

  • Jak mogę przetestować aplikację internetową ASP.NET MVC4 z EntityFramework 5?
  • Czy powinienem stosować szydercze ramy, takie jak Moq?

Wprowadzenie

Byłem badany wątek tygodni. Znalazłem dużo materiału, ale nic, co czuję, nie stanowi odpowiedzi na to pytanie. Wiele informacji ma wiele lat i może nie mieć zastosowania.Jak pisać testy dla mojej aplikacji internetowej?

Moja sytuacja

buduję aplikację MVC4 który jest przebudowa istniejącej ale przestarzały aplikacji. Baza danych już istnieje (i dlatego podejście oparte na bazie danych), jest duża i złożona. Idealnie, czego chcę, to fałszywy obiekt "entity", który jest identyczny z moim głównym obiektem podmiotu, ale wykorzystuje inną, "fałszywą" lub w pamięci bazę danych, aby móc wygenerować masę fałszywych danych, uruchomić testy i otrzymać opinię. Na przykład:

FakeEntities _db = new FakeEntities(); 
// test a controller action 

tej pory ...

Z tego co rozumiem, jakim powinien być używany integration testing. Według this post by Ladislav Mrnka integracji testowanie oznacza działania kontrolera Testowanie i oznacza mniej problemów z LINQ do podmiotów i LINQ-obiekty

jeśli mock repozytorium będzie użyć Linq do obiektów i trzeba będzie zielony Test ale jeśli uruchomić aplikację z LINQ-podmioty dostaniesz wyjątek

wiem, co on oznacza i mogę się zgodzić - Chciałbym zapewnić, zawsze jestem przy użyciu Linq do podmiotów oraz rzeczywistą (lub zbliżoną do rzeczywistej) bazą danych.

Wiele czytałem o modelach repository pattern i this blog by linush, które wydają się być bardzo zbliżone do tego, co próbuję. W rzeczywistości stworzyłem już fikcyjny projekt, w którym przetestowałem tworzenie generic repository i pomyślnie użyto Entity Framework i "udawanego" DbContext, który bazował na ObjectSet w pamięci.

Mój problem z tym podejściem jest

  1. Jak wyżej, oznacza to używam Linq do obiektów zamiast Linq do podmiotów
  2. Moja aplikacja internetowa będzie polegać na wykorzystaniu ciężkiego Przechowywane procedury

Podsumowanie przed odebraniem

  • MVC4, EF5 i SQL Server (chociaż chciałbym pozostać somewh w bazie agnostyka)
  • możliwość sprawdzenia logiki, które używają SQL procedur przechowywanych
  • LINQ-podmiotów
  • bazy Pierwsze podejście
+4

Tylko 50 powtórzeń za tak wiele pytań !!!!!! Spróbuj zwiększyć liczbę 0: –

+0

[Bezpłatna analiza wydajności sieci Web AJAX Edition i narzędzie do debugowania] (http://www.compuware.com/en_us/application-performance-management/products/ajax-free-edition/Capabilities.html) –

Odpowiedz

1

Twoje pytanie jest sama wypełniona sprzecznościami. Na przykład mówisz, że ważne jest przetestowanie procedur przechowywanych, ale także chcesz być agnostykiem bazy danych. Który to?

Jeśli naprawdę chcesz być agnostykiem bazy danych, pozbyć się procedur przechowywanych i znacznie uprościć środowisko testowe. Będziesz mógł używać całkowicie zapisanej w pamięci bazy danych (takiej jak Apache Derby) jako części twojego środowiska testowego. To ułatwia pisanie wewnątrz Jenkinsa lub dowolnego innego środowiska CI.

Następnie musisz zdecydować, co chcesz przetestować. Jeśli owijasz testy jednostkowe wokół kontrolerów, upewnij się, że piszesz kontrolery, aby można je było przetestować. Ponieważ zaczynasz od zera, powinno to być łatwe. Użyj takich pojęć jak wstrzyknięcie, aby łatwo wymienić części swojej funkcjonalności na fałszywe implementacje. Użyj pozornej struktury obiektów (jak odkryłeś), aby utworzyć zestaw obiektów, które przekażemy kontrolowanemu kontrolerowi.

Wszystko powyższe jest dobre, jeśli możesz samodzielnie przetestować kontrolery. Ale jeśli budujesz wysoce współzależny stos z przechowywanymi w bazie danych procedurami, głęboko wchodzącymi w interakcje z kontrolerami i widokami, to to nie zadziała dobrze. Albo przeprojektuj swoje podejście, aby możliwe było testowanie jednostki, albo przejdź do testowania funkcjonalnego.

Selenium to jedno z najbardziej znanych i używanych środowisk testów funkcjonalnych dla aplikacji internetowych. Możesz przetestować cały system od końca do końca. Co więcej, możesz zacząć pisać testy Selenium wokół istniejącej starej aplikacji, a następnie upewnić się, że nowa implementacja powiela te same funkcje podczas przepisywania.