Staram się przyzwyczaić do regularnego pisania testów jednostkowych za pomocą mojego kodu, ale najpierw przeczytałem, że ważne jest, aby napisać testowalny kod . To pytanie dotyczy SOLIDNYCH zasad pisania kodu testowalnego, ale chcę wiedzieć, czy te zasady projektowania są korzystne (a przynajmniej nie szkodliwe), nie planując w ogóle pisania testów. Aby wyjaśnić - rozumiem znaczenie pisania testów; nie jest to pytanie o ich przydatność.
Aby zilustrować moje zamieszanie, w artykule, który zainspirował to pytanie, pisarz podaje przykład funkcji, która sprawdza aktualny czas i zwraca pewną wartość w zależności od czasu. Autor wskazuje na to jako zły kod, ponieważ produkuje dane (czas), które wykorzystuje wewnętrznie, co utrudnia testowanie. Wydaje mi się jednak, że przesadzanie z czasem jest argumentem. W pewnym momencie wartość należy zainicjować, a dlaczego nie najbliżej konsumpcji? Ponadto moim zdaniem celem tej metody jest zwrócenie pewnej wartości w oparciu o bieżący czas , czyniąc z tego parametr, który sugerujesz, że ten cel można / należy zmienić. To i inne pytania prowadzą mnie do zastanowienia się, czy testowalny kod był synonimem „lepszego” kodu.
Czy pisanie testowalnego kodu jest nadal dobrą praktyką nawet przy braku testów?
Czy kod do testowania jest rzeczywiście bardziej stabilny? został zaproponowany jako duplikat. To pytanie dotyczy jednak „stabilności” kodu, ale szerzej pytam o to, czy kod jest lepszy z innych powodów, takich jak czytelność, wydajność, łączenie itd.
func(X)
wróci "Morning"
, to zastąpienie wszystkich wystąpień func(X)
ze "Morning"
nie zmieni programu (czyli powołanie. func
Nie coś innego niż Zwraca wartość zrobić). Idempotencja oznacza, że albo func(func(X)) == X
(co nie jest poprawne pod względem typu), albo func(X); func(X);
wywołuje takie same skutki uboczne jak func(X)
(ale tutaj nie ma żadnych skutków ubocznych)