Używamy wtyczki SonarQube i JaCoco maven do wyodrębniania pomiarów testowych, takich jak pokrycie kodu.

Jednak uważam, że brakuje nam pomiarów i chciałbym znaleźć sposób na zmierzenie liczby testów na metodę publiczną.

Podstawą tego jest to, że zauważyłem, że jest całkiem możliwe uzyskanie 100% pokrycia metody, klasy i linii za pomocą jednego testu dla metody skróconej.

Testowana metoda

public Integer parseString(String value) {
       return null;
}

Testuj

public void parseStringShouldReturnNullWhenNullIsProvided() {
       Integer result = parseString(null);
       Assert.assertNull(result);
}

Powyższy przykład daje 100% pokrycia, ale nie podaje żadnej wartości.

Ale gdybyśmy byli w stanie zmierzyć testy metodą publiczną, dałoby to wynik 1, co należy uznać za zły wynik. Dodając kolejny test dla tej metody, pomiar wzrósłby do 2 i nowy test zakończyłby się niepowodzeniem, ale pokrycie nadal wynosiłoby 100%

Czy ktoś zna narzędzie, które wyodrębnia tego rodzaju pomiary z aplikacji Java? Najlepiej coś, co można podłączyć do programu jako wtyczka.

1
Nadrendion 18 grudzień 2019, 13:06
W rzeczywistości twój przykład pokazuje, że „ile testów istnieje na metodę” jest tak samo bezsensowne, jak pokrycie kodu. Żaden z nich nie wskazuje, co zostało przetestowane, a posiadanie 1000 słabych testów nie jest lepsze niż jeden rozsądny test.
 – 
Holger
18 grudzień 2019, 13:13
- masz całkowitą rację. Jakości testów nie da się zmierzyć w żaden sensowny sposób. Najpierw pomyślałem, że jeśli masz wysoki współczynnik testów na metodę, to jest bardziej prawdopodobne, że będziesz mieć test, który da jakąś wartość, ale to założenie niekoniecznie musi być prawdziwe. Jest to po prostu pomiar wzdłuż tych samych linii, co pokrycie kodu/testu. Twój komentarz sprawił, że zacząłem się zastanawiać, czym jest test jednostkowy i co wystarczy testów. Mam tam teraz kilka pomysłów, ale to jest poza zakresem tego pytania.
 – 
Nadrendion
20 grudzień 2019, 06:43

1 odpowiedź

Pokrycie linii lub pokrycie metod nie pomaga w ocenie jakości testu i właśnie tego szukasz. Jakości testu nie można łatwo określić, patrząc na liczbę testów na metodę lub linie, ponieważ jest w dużej mierze zdeterminowana przez jakość potwierdzeń.

Istnieją narzędzia do wykonywania takich pomiarów. Wiele z nich przeprowadza testy mutacji, zmienia kod produkcyjny w pamięci i sprawdza, czy wystąpił błąd testu. Jeśli nie ma żadnego błędu testu, operacja, która została zmieniona, nie jest tak naprawdę testowana.

Z powodzeniem korzystałem już z pitest, ale pamiętaj, że ma to ogromny wpływ na czas wykonania testu, nawet z opcją historii włączony.

2
Nicktar 18 grudzień 2019, 13:12