2008-09-21 14 views
33

Przygotowuję aplikację szyn i właśnie skończyłem robić testy jednostkowe, a mój przyjaciel powiedział, że pozornie urządzenia nie są już fajne i ludzie używają teraz RSPec lub shoulda. Zastanawiam się, jakie są rzeczywiste zalety korzystania z tych innych narzędzi. Każda informacja w ogóle jest doceniana.Dlaczego powinienem używać RSpec lub shoulda z Railsami?

-fREW

Odpowiedz

4

RSpec jest bardziej wydajne, ponieważ jest o wiele łatwiej czytać i pisać testy w. Jest to także bardzo elegancki podczas korzystania mocks i odcinki, pojęcie, które staną się niezwykle przydatne po rozpoczęciu korzystania z nich w twoje testy. Wypróbuj w prostej aplikacji testowej (NON RAILS!), A zobaczysz, jak elegancka jest Twoja specyfikacja w porównaniu do standardowych testów.

22

Ja osobiście wolę Shoulda od RSpec. Uważam, że Shoulda ma mniej magiczną składnię niż RSpec. Mój problem z RSpecem polega na tym, że tak, jest bardzo czytelny, gdy czytam go na głos, ale kiedy go piszę, hmmmm, nigdy nie jestem pewna, czydane stwierdzenie powinno być napisane. Prag Dave explains the problem better than me. On również likes Shoulda i ma kilka przykładów.

+1

Całkowicie zgadzam się z webmat. Naprawdę zmagam się ze zrozumieniem składni RSpec, ponieważ ma tak dużo cukru syntaktycznego. Zamienia zwykłe wyrażenia w kod, ale wtedy odkryjesz, co ma robić! Krzywa jest stroma i jestem leniwy. – srboisvert

+0

Byłem też trochę podejrzliwy co do słodkiej składni, ale po przeczytaniu http://rdoc.info/gems/rspec-expectations/2.4.0/RSpec/Matchers właściwie nie mam problemu z pisaniem moich twierdzeń Składnia RSpec. (Być może dokumentacja po prostu poprawiła się w ciągu 2,5 roku od twojej odpowiedzi. ^^) Tak naprawdę, teraz lubię oczekiwania RSpec znacznie lepiej niż twierdzenia Test :: Unit (i to wciąż nie ma w ogóle nic wspólnego z "angielską czytelnością" (mis -)cecha). –

7

Istnieją dwie różne rzeczy tutaj:

Pierwszą rzeczą jest to, co ramy używać do pisania testów/specyfikacje. Tutaj możesz wybrać pomiędzy Test :: Unit, RSpec, Shoulda i tak dalej. Wybór polega na tym, czy chcesz wykonać tradycyjny TDD (Test :: Unit), czy wolisz alternatywne sposoby myślenia o specyficznym zachowaniu zalecane przez programistów takich jak: David Chemlinsky (RSpec i do pewnego stopnia Shoulda).

Drugą kwestią jest obsługa danych testowych. Są to railsowe mecze i alternatywy wyznaczone z innymi celami, takimi jak the FixtureReplacement plugin. Zanim urządzenia Rails 2.0 miały znaczące i dobrze udokumentowane praktyczne problemy. Wiele praktycznych problemów zostało naprawionych w Railsach 2.0. Jednak urządzenia mogą prowadzić do niezamierzonego sprzężenia testowego, a niektóre alternatywy starają się tego uniknąć.

2

Jeśli budujesz dużą aplikację i nie masz zespołu, który jest naprawdę dobry w pisaniu oddzielonego od kodu kodu, który może być dobrze przetestowany przy użyciu testów w trybie czarno-białym i jest gotowy do pełnego wykorzystania/debugowania wielu próbnych wiadomości & Cykle, nie idź drogą Factory.

Gdziekolwiek czytasz o tym, jak Awesome Factories Zobaczysz małe zastrzeżenie na temat tego, jak fabryki mogą nie być możliwe w dużej aplikacji, ponieważ są nieco wolniejsze niż instalacje.

Ale "trochę wolniej" jest wolniejsze o kilka rzędów wielkości.

Fabryki nie są znacznie łatwiejsze do kodowania niż urządzenia, które używają etykiet do identyfikatorów, o ile utrzymasz organizację urządzeń. W niektórych przypadkach trudniej jest debugować fabryki.

Właśnie dziś przekonwertowałem pojedynczą fabrykę na urządzenia, a środowisko uruchomieniowe pliku testowego, który z niego korzystał, przeszło z 65 sekund na 15 sekund, chociaż tylko około 15% testów tego pliku testowego używa tej fabryki.

Jeśli używasz minitest, możesz uruchomić testy w losowej kolejności; to szybko ujawni jakiekolwiek powiązanie danych między testami. (nie jestem pewien, czy rspec ma możliwość losowego wyboru kolejności testu)

1

Test :: Jednostka jest dobra dla małych aplikacji. Ale jest wiele korzyści z używania frameworków testowych takich jak Shoulda lub RSpec, np. sol. konteksty !!

Nie widzę Shoulda i RSpec w relacji typu "albo". Używam pakietu Shoulda jako substytutu dla RSpec, jeśli chodzi o testowanie pojedynczego twierdzenia. Bardzo podoba mi się jednoliniakowe Shoulda, ale pisanie matcherów jest znacznie łatwiejsze w RSpec. Tak więc radzę używać różnych narzędzi do testowania, w których najlepiej pasują.

0

Możesz używać szkieletu testowego, takiego jak Ogórek, który jest jeszcze szybszy niż RSpec ..

Powiązane problemy