Ja używam rspec-a tak od niecałego roku i generalnie jestem zadowolony. Nie jestem jakoś bardzo doświadczony w testowaniu, ciągle eksperymentuje z tym co testować a czego nie i jak.
Jest tu dużo wątpliwości:
- czy robić jedno sprawdzenie w teście czy wiele, pierwsze jest niby zgodne z filozofia BDD, ale znowu trzeba napisać masę kodu
- czy dublować testy, czy robić refactoring jak są podobne, zaoszczędzamy miejsca, ale znowu jest nieczytelne
- czy testować banalne operacje CRUD w każdym kontrolerze
Te problemy zdaje się najlepiej są rozwiązane w shoulda, gdzie są te makra, które załatwiają większość prostych testów, które w rspecu trzeba pisać ręcznie.
Wielki problem jest z tym czy robić mocki czy nie. Do tej pory zawsze mockowałem modele, bo wszędzie pisali, że musi być izolacja. Ale mockowanie w nawet prostych projektach jest już mocno skomplikowane i uciążliwe, zwłaszcza przy mockowaniu powiązanych obiektów. Jak się doda jakąś nową metodę to zaraz trzeba wszedzie pododać mocki itp. Dlatego powoli od tego odchodzę, chociaż czasami mocki się przydają.
Polecam prezentację na temat testowania Merba http://merbcamp.com/video/katz1.mp4, ale odnosi się też ogólnie do testowania.
Od dwóch dni bawię się cucumberem (następca story runnera), przeportowałem na niego kilka projektów i uważam, że jest świetny :), zwłaszcza ten patent z tablicami FIT, który znacznie upraszcza tworzenie obiektów w scenariuszach i ogólnie powtarzanie kroków a także całych scenariuszy.
Warto się temu przyjrzeć http://github.com/aslakhellesoy/cucumber/wikis/using-fit-tables-in-a-feature
Cucumber ma wbudowaną integrację z webratem, który nieźle się rozwija, dodali opcję do dołączania plików w formularzach, więc można teraz już testować np. wgrywanie zdjęć.
Generalnie teraz mam zamiar w testach stosować tylko scenariusze użycia (ew. jakieś niskopoziomowe rzeczy testować w tym podstawowym rspecu). Ważne przy ich pisaniu jest to, żeby testować tylko publiczne interfejsy, jeśli jest scenariusz dodawania np. produktu to nie sprawdzamy czy produkt jest w bazie, tylko czy się wyświetla na stronie.
Uważam, że scenariusze nadają się do tego najlepiej. Dodatkowo nie trzeba programistów do ich pisania. Plusem cucumbera jest obsługa języka polskiego (chociaż troche lipnie to wygląda, ale chyba lepiej się nie da zrobić).