Czasami natrafiam na sytuację, w której naprawienie błędu wymaga usunięcia części kodu. Zakłada się, że purysta TDD zaleciłby napisanie testu zakończonego niepowodzeniem, usunięcie kodu, a następnie obejrzenie testu.
Teraz naprawdę dziwnie jest mieć test potwierdzający usunięcie części kodu. Pewnie, przypuszczam, że zapewniłoby to, że nikt nie wkopałby się w kontrolę źródła i nie wprowadziłby tego kodu z powrotem, ale czy warto? Jeśli warto, to z pewnością wydaje się mniej wartościowe niż napisanie testu dla dodanego kodu , prawda?
unit-testing
tdd
bug
jhewlett
źródło
źródło
Odpowiedzi:
Patrzysz na to niewłaściwie. Test nie stwierdza, że kod został usunięty. Badanie wykonuje assert pewnej funkcjonalności.
Test nie dba o ilość kodu wymaganą do jego przejścia, ani nie zdaje sobie sprawy, że usunąłeś część kodu. Wartość takiego testu jest taka sama jak w przypadku każdego innego testu, który tworzysz z powodu błędu: masz pewność, że błąd nie pojawi się po przejściu testu, a integracja testu z procesem kompilacji zapewnia, że błąd będzie najprawdopodobniej nie zostanie ponownie wprowadzony.
Jeszcze inny sposób spojrzenia na to z perspektywy TDD jest następujący: jeśli wiesz, że usunięcie kodu naprawia błąd, a potem zastanawiasz się, czy napisać test, już zrobiłeś TDD źle. Po rozpoczęciu pracy nad błędem powinieneś najpierw napisać test, który zapewni obecność błędu przez niepowodzenie. Dopiero potem naprawisz rzeczywisty błąd - który może wymagać usunięcia kodu lub nie - i zdasz test. Pytanie, które zadajesz, nawet nie powstaje w ten sposób.
źródło