@Shalom: zawsze wychodzi się od potrzeb klienta, ale istnieje też coś takiego jak utrzymywalność systemu - dlatego staramy się właśnie nie używać magicznych zmiennych i pilnujemy by kod był czytelny.
Dziś masz tam listę a jutro dwa z tych walidatorów złożą się w 1 a trzeci rozbije na 2 i będziesz przepisywać swoje testy, mimo że wszystko działa
Mam bardzo mocne wrażenie, że nie do końca się rozumiemy. Zawsze istnieje ryzyko, że zmiana wymagań biznesowych pociągnie za sobą zmianę kodu oraz zmianę testów. Testy są po to, żeby przy mniej inwazyjnych zmianach wyłapywać potencjalne problemy - bo choćbyś stanął na głowie to jeśli zmieni ci się kontrakt na MyService.handle
to będziesz musiał zmienić i implementację, i testy.
I powtórzę się - wszystko zależy od konkretnego przypadku. W przykładzie podanym przeze mnie podejście do testów klasy MyService
zależy od kontekstu w jakim ta klasa występuje - a konkretniej od tego, skąd brane są zestawy walidatorów. Inaczej podejdziesz do testowania tego przy typowym CRUDzie, gdzie wiesz jaki jest ten zestaw i będzie jeden na całą aplikację - a inaczej podejdziesz gdy ten zestaw będzie konfigurowalny przez użytkownika.
Testuj zachowanie a nie kod.O tym czy kod się zmienił wystarczy ze informuje cię git, nie potrzeba do tego jeszcze testów.
"testuj zachowanie, a nie kod" to dla mnie taki niewiele wnoszący slogan. Zrozumiałbym "testuj zachowanie, a nie zależności", ale "testuj zachowanie, a nie kod" czy "testuj zachowanie, a nie implementację" nie mają sensu - bo czym jest jakikolwiek test jeśli nie sprawdzaniem jak zachowa się konkretna implementacja - czyli konkretny kawałek kodu?
Rozumiem o co chodzi - o to, żeby zwracać uwagę na "kontraktowe" wyniki działania kodu, tj. dowolny kod może sobie tam pod spodem układać w pamięci obliczenia jak chce (dopóki oczywiście to nas nie obchodzi) - byleby to robił zgodnie z wymaganiami.
Ja lubie jak puszczam testy i wiem ze jak są zielone to znaczy ze system działa i można mergować. Bardzo nie lubie kiedy refaktor strukturalny sprawia ze testy zaczynają failować.
Testowanie zachowania jest testowaniem kodu.
No fajnie, ale ja nie o tym.