Prawdziwy projekt pokazał mi, że nie jest możliwe napisanie testów jednostkowych, a następnie integracja, a nawet odwrotny kierunek jest niewłaściwy :-) Tak więc zwykle piszę testy jednostkowe razem z testami integracyjnymi.
Czemu? Pozwól mi napisać, jak widzę oba rodzaje testów:
Testy jednostkowe - Oprócz Wikipedii i wszystkich znanych informacji, testy jednostkowe pomagają zawęzić projekt , ulepszyć model, relacje. Przebieg jest prosty: kiedy zaczniesz pisać nowy projekt / nowy komponent, przez większość czasu tworzysz jakiś rodzaj PoC . Kiedy skończysz, zawsze masz długie metody, długie klasy, niespójne metody i klasy itp.
Testy jednostkowe pomagają usunąć te problemy, ponieważ podczas przeprowadzania rzeczywistych testów jednostkowych przy użyciu próbnych (bez zależności od innych komponentów) klas opisanych powyżej nie można przetestować. Podstawowym znakiem niestabilnego kodu jest duża część kpiąca testów, ponieważ jesteś zmuszony kpić z wielu zależności (lub sytuacji)
Testy integracyjne - testy poprawne i robocze mówią ci, że twój nowy komponent (lub komponenty) współpracują razem lub z innymi komponentami - jest to zwykle definicja. Przekonałem się, że testy integracyjne w większości pomagają zdefiniować sposób korzystania z komponentu od strony konsumenta .
Jest to naprawdę ważne, ponieważ czasami mówi ci, że Twój interfejs API nie ma sensu z zewnątrz.
Co się stanie, gdy później napisze testy jednostkowe i testy integracyjne?
Dostałem fajne klasy, przejrzysty projekt, dobry konstruktor, krótkie i spójne metody, gotowy na IoC itp. Gdy podałem moją klasę / interfejs API niektórym konsumentom, np. Programistom z zespołu ds. Integracji lub GUI, nie był w stanie używać mojego API, ponieważ wydaje się to nielogiczne , dziwne. Po prostu był zdezorientowany. Naprawiłem API zgodnie z jego punktem widzenia, ale wymagało to również przepisania wielu testów, ponieważ zmuszono mnie do zmiany metod, a czasem nawet do sposobu korzystania z API.
Co się stanie, gdy później napisałem testy integracyjne i testy jednostkowe?
Mam dokładny przepływ, dobrą użyteczność. Mam też duże klasy, niespójny kod, brak rejestrowania, długie metody. Kod spaghetti
Jaka jest moja rada
Nauczyłem się następującego przepływu:
- Opracuj podstawowy szkielet swojego kodu
- Napisz testy integracyjne, które stwierdzą, czy ma to sens z punktu widzenia konsumenta. Na razie wystarczy podstawowy przypadek użycia. Test oczywiście nie działa.
- Napisz kod wraz z testami jednostkowymi dla każdej klasy.
- Napisz resztę / brak testów integracji. Lepiej byłoby zaimplementować te testy w ramach # 3, w jaki sposób poprawiasz swój kod.
Zauważ, że zrobiłem małą prezentację na temat testowania jednostek / integracji, patrz slajd nr 21, w którym opisano szkielet.