Naprawdę podoba mi się odpowiedź @ RevBingo, ponieważ sugeruje on, że walka o 100% może spowodować wyczyszczenie lub usunięcie nieużywanego kodu. To, czego nie widziałem w innych odpowiedziach, to poczucie, kiedy potrzebujesz wysokiego zasięgu, a kiedy nie. Zacząłem dźgać, zaczynając od tego. Myślę, że dodanie szczegółów do takiej tabeli byłoby bardziej przydatne niż znalezienie jednego numeru zasięgu testu, który byłby odpowiedni dla całego kodu.
100%
W przypadku publicznego interfejsu API, takiego jak Kolekcje java.util, który nie jest sprzężony z bazą danych i nie zwraca HTML, myślę, że 100% pokrycia to szlachetny cel początkowy, nawet jeśli zadowolisz się 90-95% z powodu czasu lub innych ograniczenia. Zwiększenie zasięgu testu po ukończeniu funkcji wymusza bardziej szczegółowy poziom kontroli niż w przypadku innych rodzajów przeglądu kodu. Jeśli Twój interfejs API jest w ogóle popularny, ludzie będą go używać, subklasować, deserializować itd. W sposób, którego nie możesz się spodziewać. Nie chcesz, aby ich pierwsze doświadczenie polegało na znalezieniu błędu lub nadzorowaniu projektu!
90%
W przypadku kodu infrastruktury biznesowej, który pobiera struktury danych i zwraca struktury danych, 100% jest prawdopodobnie dobrym początkowym celem, ale jeśli ten kod nie jest wystarczająco publiczny, aby zachęcić do niewłaściwego użycia, może 85% jest nadal akceptowalne?
75%
W przypadku kodu, który przyjmuje i zwraca ciągi, myślę, że testowanie jednostkowe jest znacznie bardziej kruche, ale może być przydatne w wielu sytuacjach.
50% lub mniej
Nienawidzę pisania testów dla funkcji, które zwracają HTML, ponieważ jest taki kruchy. Co się stanie, jeśli ktoś zmieni CSS, JavaScript lub cały obiekt HTML i angielski, który zwrócisz, nie ma sensu dla użytkowników końcowych? Jeśli możesz znaleźć funkcję, która wykorzystuje dużo logiki biznesowej do tworzenia małego kodu HTML, warto ją przetestować. Ale odwrotna sytuacja może w ogóle nie być warta przetestowania.
Prawie 0%
W przypadku niektórych kodów definicja „poprawna” to „ma sens dla użytkownika końcowego”. Istnieją nietradycyjne testy, które można wykonać na tym kodzie, takie jak automatyczne sprawdzanie gramatyki lub sprawdzanie poprawności danych wyjściowych w formacie HTML. Skonfigurowałem nawet instrukcje grep dla niewielkich niespójności, na które zwykle padamy ofiarą w pracy, na przykład mówiąc „Zaloguj się”, gdy reszta systemu nazywa to „Zaloguj się”. Ten człowiek nie jest ściśle testem jednostkowym, ale jest pomocnym sposobem na wychwycenie problemów bez oczekiwania konkretnej wydajności.
Ostatecznie jednak tylko człowiek może ocenić, co jest rozsądne dla ludzi. Testy jednostkowe nie mogą ci w tym pomóc. Czasami potrzeba kilku ludzi, aby dokładnie to ocenić.
Absolutnie 0%
To smutna kategoria i wydaje mi się, że nie jestem osobą, która by ją pisała. Ale w każdym wystarczająco dużym projekcie są dziury dla królików, które mogą ssać osobiście tygodnie bez żadnych korzyści biznesowych.
Kupiłem książkę, ponieważ twierdziła, że pokazuje, jak automatycznie wyśmiewać dane do testowania Hibernacji. Ale testował tylko zapytania Hibernate HQL i SQL. Jeśli musisz robić dużo HQL i SQL, tak naprawdę nie zyskujesz zalet Hibernacji. Istnieje pewna forma bazy danych Hibernacja w pamięci, ale nie zainwestowałem czasu, aby dowiedzieć się, jak efektywnie wykorzystać ją w testach. Gdybym tak działał, chciałbym mieć wysoki (50% -100%) zasięg testu dla dowolnej logiki biznesowej, która oblicza różne rzeczy, poruszając się po grafie obiektowym, powodując, że Hibernacja uruchamia niektóre zapytania. Moja zdolność do testowania tego kodu jest teraz bliska 0% i to jest problem. Dlatego poprawiam zasięg testów w innych obszarach projektu i staram się preferować funkcje czyste niż te, które mają dostęp do bazy danych, głównie dlatego, że łatwiej jest pisać testy dla tych funkcji. Nadal,