Mam klasę podstawową z dużą ilością „metaprogramowania”, aby zapewnić jej elastyczność / abstrakcję, która musi być raczej ogólna.
Mam wiele podklas, które używają wspólnych metod w klasie podstawowej, i mam zorientowane na zachowanie testy jednostkowe obejmujące wszystkie przypadki w każdej podklasie.
Czy można pominąć testowanie klasy podstawowej?
unit-testing
testing
Nathan
źródło
źródło
Odpowiedzi:
Aby sprawdzić, czy masz wystarczającą liczbę testów, możesz sprawdzić zasięg kodu i zasięg gałęzi wywołany przez testy (może za pomocą narzędzia pokrycia, może ręcznie poprzez przejrzenie ścieżek kodu lub za pomocą debugera).
Jeśli dojdziesz do wniosku, testy dla podklas zapewniają wystarczająco wysoki zasięg dla kodu klas podstawowych, to dodanie kolejnych testów oczywiście nie przyniesie ci wiele korzyści. Z drugiej strony, jeśli istnieją ścieżki kodu, które można testować tylko poprzez dodanie konkretnych testów przy użyciu klasy podstawowej bezpośrednio, należy wybrać tę trasę.
Innym możliwym powodem „bezpośredniego testowania klasy podstawowej” jest to, że chcesz przetestować określoną funkcję tej klasy „w izolacji”. Czasami może być łatwiej zaprojektować przypadki testowe bezpośrednio dla konkretnej metody, zamiast tylko testować tę metodę pośrednio, wywołując metody z twoich podklas, które używają tej metody.
Zauważ, że jeśli masz ogólną klasę podstawową, dla której typowym scenariuszem użycia jest wyprowadzenie podklasy, twoja klasa podstawowa jest prawdopodobnie abstrakcyjna. Tak więc, aby przetestować taką klasę, musisz zrobić pochodną. W tej sytuacji testowanie „klasy podstawowej bezpośrednio” może oczywiście oznaczać dodanie specjalnej pochodnej wyłącznie do celów testowych.
źródło
Przeprowadzamy testy, aby zwiększyć produktywność i zmniejszyć liczbę „problemów”, na które narzekają klienci.
Biorąc pod uwagę, że masz testy jednostkowe zorientowane na zachowanie obejmujące wszystkie przypadki w każdej podklasie, nie ma dla ciebie korzyści, że klient również testuje bezpośrednio klasę podstawową. Można to potwierdzić , zmieniając jakiś kod w klasie bazowej i sprawdzając, czy test się nie powiedzie, np. Wydzielając wiersz kodu lub dodając „nie” do „instrukcji if”. (Samo sprawdzenie, czy każda linia kodu jest objęta testami, nie jest wystarczająco dobre).
Pozostaje nam pytanie, czy test zwiększy produktywność . Może się to zdarzyć na kilka sposobów.
Biorąc pod uwagę, że podklasy działają, nie widzę sensu w pisaniu bezpośrednich testów dla klasy podstawowej. Nie jest tak, że pisanie tych testów na wczesnym etapie nie przyniosłoby korzyści.
źródło