2009-09-19 17 views
21

Jestem trochę zdezorientowany przez samą liczbę frameworków testowych dostępnych dla Ruby/ROR.Czy ogórek eliminuje potrzebę pisania testów jednostkowych?

Niedawno obejrzałem Cucumber Railscasts i okazało się, że są bardzo interesujące. Więc zacząłem grać, a następnie walczyłem, aby zobaczyć koncepcyjnie, gdzie chciałbym umieścić różne testy.

Wydaje się, że całkiem możliwe jest zrobienie wszystkiego, co można zrobić w testach jednostkowych w ramach Ogórka, więc muszę napisać testy jednostkowe lub po prostu napisać definicje cech i skoncentrować się na zapewnieniu tak dobrego zasięgu, jak ja można tego użyć.

Czy mogę utworzyć testy jednostek za pomocą Rspec lub Test: Unit? Kiedy testuję funkcjonalność Ajax, czy powinienem używać Selenium lub Watir?

Wydaje się, że jest tu tak wiele opcji, z którymi walczę, aby zobaczyć, które narzędzia i gdzie są granice.

Co to są doświadczenia innych osób związanych z ogórkiem i gdzie narysować linię między napisaniem testów integracji ogórka i testu: jednostki i/lub Rspec na podstawie testów jednostkowych i funkcjonalnych. Czy ktoś jest świadomy dobrego zapisu na ten temat, sugerując, gdzie narysować linie pomiędzy metodami testowania a mocnymi i słabymi stronami różnych narzędzi.

Doceniam to, że niektóre z nich są subiektywne, ale z zadowoleniem przyjdą wspólne podejścia do tego, jak zaatakować tę kwestię.

Odpowiedz

20

Użyj ogórka na wysokim poziomie, aby opisać, co użytkownik powinien widzieć i robić. Użyj RSpec, Test: Unit, Shoulda, itp., Aby napisać testy jednostkowe. Prosto z the horse's mouth:

Decydując chcesz dodać nową funkcję lub naprawić błąd, uruchom pisząc nową funkcję lub scenariusz, który opisuje, w jaki sposób funkcja powinna działać. Nie pisz żadnego kodu (jeszcze).

...

To jest po rozpoczęciu pisania kodu. Zacznij od napisania kilku linii kodu, aby rozwiązać problem z porażką z ogórka. Ponownie uruchom ogórek. Powtarzaj i płucz, aż będziesz zadowolony ze swojej funkcji. Gdy przejdziesz do szczegółów szczegółów, upuść jeden poziom abstrakcji i skorzystaj z RSpec lub dowolnego frameworka testowania Rubiego, aby napisać pewne specyfikacje/testy dla twoich zajęć.

Ogórek jest zrobiony, aby przetestować cały stos razem, w przeciwieństwie do "jednostek".

Musisz zdecydować, gdzie narysować linię, ale wiele pod maską prawdopodobnie nie zostanie zakryty testem ogórka. Powiedz przy rejestracji, wypełniam formularz z moim imieniem, adresem e-mail, numerem telefonu itp. Test jednostkowy może sprawdzić, czy nowy User utworzy również nowy TelephoneNumber. Z punktu widzenia użytkownika nie obchodzi go to, że tworzy on nowy numer TelephoneNumber, ale gdy już się zapisali, mają konto i mogą zobaczyć swój numer telefonu.

Nie mam zbyt dużo doświadczenia pisania testów ogórków (jeszcze nie), ale mam nadzieję, że to trochę pomaga.

1

Osobiście uważam, że nie należy zaprzestać pisania testów jednostkowych. Jako narzędzie do testowania akceptacji, Ogórek powinien zastąpić twoje testy funkcjonalne i, jeśli piszesz, przeglądać testy.

Ogórki mają być proste i połączone z rzeczywistą wartością użytkową danej funkcji.

6

Kiedy test jednostkowy nie powiedzie się (mam na myśli prawdziwy test jednostkowy, który testuje metodę w izolacji za pomocą mocks), informuje, co oznacza "jednostka". Gdy test akceptacji nie powiedzie się, informuje, co oznacza "funkcja", a nie gdzie znajduje się problem.

3

Po utworzeniu aplikacji szyn domyślnie są wykonywane testy funkcjonalne, interakcyjne i jednostkowe. Ogórek jest dodatkowym testem, jest to również sposób na przetestowanie doświadczenia, które ma użytkownik. Kiedy klikną przycisk oznaczony "go", powinny wyświetlić "sukces", a nie 404. Pozwoli to upewnić się, że nic, co robisz przypadkowo, nie zakłóca wrażenia użytkownika, i że od góry do dołu twoja aplikacja działa dla najbardziej powszechnych przypadki użycia, które możesz wymyślić. Inne testy mają na celu upewnienie się, że nic nie idzie nie tak i że sprawdziłeś kiedykolwiek model i metodę za pomocą mikroskopu. Może być możliwe powielenie testów jednostkowych w całości ogórkiem, ale byłoby to bolesne (i szalenie powolne w wykonaniu, szczególnie jeśli używasz selenu). Najlepszym momentem na pisanie testów jest tworzenie kodu, a najłatwiejszym i najłatwiejszym sposobem na to jest użycie wbudowanego testowania szyn i może dodatkowej pomocy, takiej jak shoulda, rspec, również jestem wielki fan fabryki-dziewczyny. Jeśli jeszcze tego nie sprawdziłeś, www.railscasts.com ma świetne wprowadzenie do ogórka, rspec i fabryka ... Wiem, że to pytanie już zostało odebrane (nie), ale to są moje dwa centy . Życzymy powodzenia!

3

Myślałem/borykałem się z tym pytaniem, a tu właśnie dotarłem.

Ogórek pierwszy i Ogórek ostatni. Ogórek zapewni podstawowy zakres badań.

Metody podstawowe modelu, które wykonują rzeczywistą pracę biznesową aplikacji, powinny również zostać opracowane/pokryte testami rspec/unit.

Dlaczego urządzenie również je testuje?

1) Testy jednostkowe sprawdzi się znacznie szybciej. 2) Ta podstawowa logika biznesowa może (prawdopodobnie) będzie używana na kilka sposobów poza bieżącymi widokami (które przepuszcza Ogórek). Metody te powinny zostać wbite we wszystkie rodzaje możliwych wejść i wyjść bezpośrednio wywołując metodę w teście.

Dlaczego nie przetestować pozostałych modeli, kontrolerów i widoków?

1) Ogórek ma już pokrycie raz. 2) Uważam, że metody kontroli-poglądów-niektórych-modeli współpracują ze sobą, aby wszystko załatwić (uważam, że wszystko zostało wykonane, aby się zalogować); więc lubię je testować razem.

+0

"Ogórek pierwszy i Ogórek ostatni" Miły cytat. Myślę, że ta odpowiedź jest bardziej na poziomie, jakiego potrzebują początkujący, tacy jak ja. – KobeJohn

0

Z mojego doświadczenia, Cucumber i Rspec mają różne odwołania. Rspec odwołuje się do mnie z perspektywy programisty, ponieważ jest łatwy do napisania i zapewnia bardzo szybką informację zwrotną, gdy coś się zepsuje. Ogórek nie jest dla mnie atrakcyjny jako programista, ponieważ nie działa tak szybko, jak Rspec. Jednak Cucumber odwołuje się do mnie jako interesariusza biznesowego, ponieważ zapewnia pełne pokrycie wszystkich funkcji.

Zrób sobie przysługę i kontynuuj pisanie testów jednostkowych.

2

Ćwiczę Ogórek/RSpec przez ostatnie pół roku robiąc BDD.

Po pierwsze, niełatwo jest dostać się do BDD, na początku będzie on nienaturalny.

Ale gdy już to zrobisz, nie ma innego sposobu programowania.

Aby odpowiedzieć na pytanie. Do testowania Javascript potrzebny jest sterownik javascript, który może być używany przez Capybara, który jest używany przez Cucumber.

kapibary-WebKit jest co wszystkie fajne dzieciaki używać teraz te dni

Jest jeszcze jedna ważna rzecz, aby pamiętać.

Testy integracyjne są powolne.

Testy jednostkowe są szybkie, ale mogą być powolne, więc ważne jest, aby użyć właściwego czyszczenia bazy danych i pisać dobre testy, które mają dobrą izolację.

Moja konfiguracja testu którego jestem bardzo zadowolony z:

Gwardii do załadunku Spork Spork dla szybszych testów Ogórek do testowania integracji Kapibara-WebKit dla javascript testów RSpec dla testów jednostkowych

I nie przeglądaj testów i testów kontrolerów, ponieważ są one moim zdaniem zbyteczne, ponieważ dobra znajomość XPATH sprawi, że napiszesz niezwykłe testy, które nawet pokrywają układ i strukturę strony.

Powiązane problemy