2009-08-11 27 views
14

Staraliśmy się wprowadzić test logiki front-testing na ostatnim projekcie, a wartość testów jest kwestionowana.Testowanie jednostek logiki przedniej

Nie byliśmy recenzentem testów kodu, więc ich jakość jest niska, programiści skopiowali słabe testy, powodując gorsze testy, a więc mamy wiele testów.

Nadal uważam, że warto przetestować prezenterów (używamy MVP), ale dostanie się na pokład z tym jest trudniejsze, niż początkowo sądziłem.

W jaki sposób przekonać ludzi, że testy front end są cenne i czy ktoś ma jakieś dobre zasoby, aby wskazać mi, aby mnie wesprzeć?

Dzięki ...

+2

mógłbyś dać nam więcej informacji na temat, dlaczego testy są biedni? Jakie zachowanie są "słabymi" testami? –

+0

Niektóre z testów nie testują niczego. To, co powinniśmy przetestować, to następujące, jak również wyjątkowe okoliczności. [Uruchomienie] - Czy mamy co poprawną liczbę połączeń z usługą [PreSubmit] - Czy mamy walidacji obiekt przed złożeniem i prawidłowej obsługi błędów [Zatwierdź] - Czy mamy złożenie poprawnych parametrów do prawidłowej obsługi [PostSubmit] - Czy poprawnie odświeżamy model? – Burt

Odpowiedz

9

Jednostka testowania logiki Zaczepy jest niezwykle trudne, ponieważ istnieje wiele części, które czynią go jak zmiany kodu po stronie serwera do przedniego końca i klienckich zmian bocznych wszystko może mieć wpływ na sposób wyświetlania aplikacji.

Podczas testów Google blog rozmawialiśmy o wartości testowania wszystkich części MVP i wartości testowania AJAX poprzez krępowanie drogich części here. Misko Hevery mówi o różnych testach here i wydaje mi się, że testy Front End należą do jego dużej kategorii testowej, więc zawsze mają szansę na fałszywe negatywy/pozytywy, ale muszą być posortowane, ponieważ wciąż oferują dużo wartości

Testy front end są niezwykle cenne, ponieważ sprawdzają, czy funkcja użytkownika nie została usunięta. Właśnie dlatego narzędzia takie jak Selenium i Watir są tak popularne.


+0

Testy z Selenium nie są testami jednostkowymi, ale –

1

Pytanie do mnie byłoby kompromisem pomiędzy kosztami utrzymania testów a prawdopodobieństwem złapania błędów, które nie zostałyby złapane inaczej. Prawdopodobnie nadal będziesz mieć wizualne testy rzeczywistego interfejsu użytkownika (naprawdę dobrze zrobisz, aby sprawdzić estetykę w inny sposób).

Czy możesz na przykład skupić się tylko na niektórych aspektach prezentera. Na przykład niezbyt trywialny formater, ćwiczenie z wieloma interesującymi wartościami.

Podejrzewam, że jednym ze sposobów przekonywania jest postępować powoli. Postaraj się początkowo znaleźć testy niskiego wysiłku.

4

Napraw uszkodzone okno. tutaj jest link do teorii http://en.wikipedia.org/wiki/Fixing_Broken_Windows

Skuteczną strategią zapobiegania niskiej jakości kodu jest zawsze utrzymywanie bazy kodu w czystości iw prestiżu. Oznacza to wyczyszczenie całego złego kodu. To może być bolesne i czasochłonne, ale i tak musisz to zrobić.

Po usunięciu wszystkich ostrzeżeń dotyczących kompilacji w naszym projekcie, stwierdziliśmy, że jakość naszego kodu poprawiła się. Ludzie zaczynają dbać o to, co sprawdzają, ponieważ wysyłamy sygnał, że nie jest w porządku sprawdzać złego kodu (nawet ostrzeżenie nie jest w porządku) i nikt nie chce być pierwszym, który złamie okno.

4

Inną pułapką przy testowaniu interfejsu użytkownika jest to, że szczególnie łatwo jest napisać testy testujące architekturę , a nie aplikację. Lub powiedziane na odwrót: może być trudnym napisanie testu, który faktycznie przetestuje twój interfejs użytkownika, a nie interfejs użytkownika framework.

Na przykład, niektóre zespoły skończyć pisanie wiele niepotrzebnych badań, takich jak:

Given a button, when the button is clicked, the event handler should fire. 
+0

Dzięki za komentarz. Nasze testy front-end gwarantują, że zdarzenie zostanie nawiązane i że zostaną wykonane odpowiednie zgłoszenia serwisowe. Początkowo wiele frameworków musiało być wyśmiewanych, abyśmy mogli przetestować rzeczywistą logikę front-end, tj. Sprawdzanie poprawności lub wywołania serwisowe. Ale kiedy to zostało umieszczone w abstrakcyjnej klasie bazowej, moglibyśmy po prostu przetestować odpowiednią logikę. Interesujące, dlaczego testujesz, czy wydarzenie jest bezużyteczne? – Burt

+4

Mówię, że nie chcesz testować infrastruktury, której nie napisałeś. Jeśli napisałeś infrastrukturę, napisz testy i nie testuj infrastruktury w testach aplikacji. Korzystam z frameworku innej firmy, który zapewnia, że ​​ich przyciski uruchamiają zdarzenia, więc ich nie testuję. Jeśli napisałeś swoją strukturę interfejsu, napisz testy, które sprawdzają, czy przyciski uruchamiają ich zdarzenia. Ale kiedy zaimplementujesz aplikację za pomocą przycisków, nie sprawdzaj, czy dany przycisk zdarzenia się uruchamiają, ponieważ testy frameworku już zapewniają, że przyciski uruchamiają zdarzenia. Czy to jest bardziej jasne? – JeffH

+0

Jest jasne, tak. Nasz framework jest wbudowany w aplikację przy użyciu wzorców takich jak wzorzec szablonu, więc wiele metod zostanie wywołanych w Ramach, które wiążą się z naszymi metodami aplikacji, tj. W wywołaniach ramek ładujących XYZMethod z kolei zwanych metodami abstrakcyjnymi X, Y, Z w naszej aplikacji. Więc nasze testy robią coś takiego jak OnLoadXCallsCorrectServiceTest(). Czy to wyjaśnia coś lepiej? – Burt