Testy testom nierówne?

Funkcje == metody klasy
Makra == wywołania metod w definicji klasy.

Przykład pokazany przez Drogomira jest oczywiście bardzo ekstremalny i oczywiście lepiej taką logikę jakoś zamknąć w metodzie.
Ale wciąż uważam że w wielu fragmentach, typu partiale, gdzie użycie całego rozwiązania do komponentów (cellsy) te 2-3 named scope’y i iteracja są całkiem koszerne.
Tylko, no właśnie, mockowanie tego w RSpecu jest upierdliwe.

Jeszcze nie czytałem ale chyba nie oni to wymyślili :wink:
Edit:
A jeszcze o mockach się wypowiem. Trzeba uważać żeby nie zbudować systemu który bardzo dobrze działa w kawałkach, ale po złozeniu do kupy jakoś ze sobą nie działa…

Z uporem maniaka powtórzę pytanie - co Cię skłania do używania mocków, zamiast testować namescopy na danych z bazy?

Izolacja testowanej logiki.

Używając bazy jeśli spieprzysz coś w modelu, poleci Ci także test kontrolera.

Oraz nie, nie przepadam za mockowaniem obiektów i stubowaniem metod, bo prowadzi do fałszywego poczucia bezpieczeństwa (trzeba wtedy równolegle pisać testy modeli) i jest z użyciem aktualnych narzędzi upierdliwe. O, dyskusja właśnie zatoczyła koło.

A ja przykłady takie jak podał Drogus testuję po prostu za pomocą fixtur. Kiedyś używałem mocków w specach kontrolera ale było to bardzo wrażliwe na wszelkie zmiany. Tzn. Zmienienie 1 linijki kodu w kontrolerze wymagało zmienienia często kilku linijek kodu ustawiającego mocki. Teraz używam mocków tylko do testów zewnętrznych usług (np. serwer FTP) Być może to co robię nie jest zgodne z najnowszymi trendami :slight_smile: ale działa całkiem dobrze i jestem zadowolony.

[quote=Tomash]Dwa słowa: mocki i stuby.
Jak używasz sporo np. named scope’ów (albo ogólnie sporo funkcji i makr), stubowanie każdego po kolei zamienia się w koszmarek.[/quote]
RSpec się poprawił i te słowa już nie są aktualne :slight_smile:
stub_chain for the rescue!

Class.stub_chain(:scope1, :scope2, ...)

Oczywiście #and_return działa na takim tworze zgodnie z oczekiwaniami.

Znowu polubiłem mocki/stuby w RSpecu :slight_smile: