Jako kontynuację dyskusji w komentarzach this answer, czy test TDD zawsze musi być zakończony niepowodzeniem?Czy test TDD zawsze powinien zakończyć się niepowodzeniem?
Rozważmy następujący przykład. Jeśli piszę implementację LinkedHashSet i jeden test testowy, który po wstawieniu duplikatu, oryginał jest w tej samej kolejności iteracji co przed wstawieniem, może chciałbym dodać osobny test, że duplikat w ogóle nie jest w zestawie.
Pierwszy test zostanie zauważony jako pierwszy, a następnie zaimplementowany.
Problem polega na tym, że implementacja pierwszego przejścia testowego wykorzystała inną implementację zestawu do przechowywania danych, więc jako efekt uboczny przechodzi już drugi test.
Myślę, że głównym celem testu nie jest zapewnienie, że test jest dobrym testem (wielokrotnie napisałem test, który według mnie może się nie powieść, ale nie, ponieważ test został napisany nieprawidłowo) . Ale jeśli masz pewność, że test, który piszesz, rzeczywiście coś testuje, czy nie jest to cenne, aby upewnić się, że nie złamiesz tego zachowania później?
Jestem co najwyżej dynamicznym żółtodziobem (stąd komentarz zamiast odpowiedzi), ale moje odczucie jest - tak dla dynamicznych języków i zależy od języków statycznych. Kod, który nie powiedzie się kompilacji w języku statycznym, będzie działał w dynamicznym języku, ale spowoduje niepowodzenie testu. Aby uruchomić język statyczny, musisz dodać pewien rodzaj zachowania bazowego do testowanego kodu (nawet jeśli są to tylko metody puste), które MOGĄ spowodować, że poprawnie napisany test przejdzie jako pierwszy. –