Czy powinienem napisać test, aby udowodnić, że usunięcie kodu naprawia błąd?

14

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?

jhewlett
źródło
8
Myślę, że każdy test regresji jest przydatny, niezależnie od tego, jak naprawiono błąd
Ismail Badawi
1
Test nie potwierdza, że ​​kod został usunięty - test stwierdza, że ​​błąd został naprawiony ...
user253751

Odpowiedzi:

50

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.

Szczery
źródło
3
+1, ale mogę sobie wyobrazić następującą sytuację: usunięty kod zawierał absurdalną funkcjonalność, którą dodał ktoś, kto nie zrozumiał poprawnie domeny problemowej. Teraz, podczas przeglądu kodu, inny programista widzi, że cała część jest naprawdę nonsensowna i kod zostanie usunięty. Mając wiele testów na takie bzdury, możesz nadęć swój zestaw testów.
Doc Brown
2
Najwyraźniej usunięta funkcja źle obsługiwała niektóre wejścia / wyjścia. Najwyraźniej ktoś w dalszej kolejności może źle zrozumieć problem w ten sam sposób. Jeśli boisz się, że pakiet testowy jest rozdęty, nie sądzę, że TDD jest dla ciebie. Czym właściwie jest wzdęcie kombinezonu testowego?
Dorus
3
@DocBrown: Jeśli robią TDD, to musi być jakiś test, który wymaga tej absurdalnej funkcjonalności, inaczej nie mieliby nawet możliwości napisania tego kodu! Pamiętaj, że możesz napisać absolutnie minimalną ilość kodu, aby test przeszedł pomyślnie. Jeśli nie ma takiego testu, kod nigdy nie powinien zostać napisany i można go po prostu usunąć. Jeśli nie jest test, że siły, które absurdalne zachowanie, to badanie powinno zostać usunięte, a teraz jesteśmy w tej samej sprawie opisałem wcześniej: test nie ma, usunąć kod.
Jörg W Mittag
W obu przypadkach nigdy nie dodajesz żadnych testów do zestawu testów, aw drugim przypadku nawet je usuwasz . Jeśli jednak okaże się, że test ma sens, to funkcjonalność wcale nie była tak absurdalna.
Jörg W Mittag