Ich habe den Unit-Test-Code geschrieben, aber gibt es wirklich genug Testfälle? ** Abdeckung **, die zu solchen Zeiten ein sichtbarer Indikator ist, enthält Linux standardmäßig eine Bibliothek namens "gcov". Da es eine große Sache ist, wechseln wir es mit der Build-Option, damit es jederzeit verwendet werden kann!
Das Verfahren ist einfach.
-fprofile-arcs -ftest-cover
hinzu.
--Stellen Sie den Bibliothekslink -lgcov
ein.Sie können es damit neu erstellen.
Ich denke, es gibt verschiedene Möglichkeiten, mit Build-Optionen zu wechseln, aber ich werde die Methode mit der selbst erstellten Konfiguration einführen, die ich derzeit verwende. Bitte beziehen Sie sich bei der Installation von configure auf hier usw.
Fügen Sie zunächst die Option ** --enable
** hinzu.
configure.ac
###
# Unit test option
AC_ARG_ENABLE(coverage,
[ --enable-coverage enable coverage test, only for developer of this package. Please "Don't" use this package if you install it, gcov is GPL license [[default=no]]],
[\
case "${enableval}" in
yes) enable_coverage=yes ;;
*) AC_MSG_ERROR(bad value for --enable-) ;;
esac],
enable_coverage=no)
#check flag, and add gcov option
if test x"${enable_coverage}" = x"yes"; then
AC_CHECK_LIB([gcov], [main])
GCOV_OPT="-fprofile-arcs -ftest-coverage"
AC_SUBST([GCOV_OPT])
fi
Danach können Sie die für gcov festgelegte Option GCOV_OPT
an Makefile.am usw. übergeben. Der Standardwert ist leer, sodass Sie ihn hinzufügen können.
In diesem Beispiel habe ich die allgemeinen Einstellungen festgelegt, die in Makefile.am gelesen werden sollen.
am.conf
AM_CPPFLAGS=-I$(top_srcdir)/design_pattern_util/include/ -I$(top_srcdir)/design_pattern_util/include/ $(GCOV_OPT)
Wenn man sich die Hilfe ansieht, sieht es so aus. Es macht Spaß, Hilfe zu bekommen. (Wenn Sie den Wortlaut mit AC_HELP_STRING schreiben, können Sie eine schönere Ausgabe durchführen.)
python
$ ./configure --help
--enable-coverage enable coverage test, only for developer of this package. Please "Don't" use this package if you install it, gcov is GPL license [default=no]
Wenn gcov erfolgreich verwendet wird, haben Sie nach dem Erstellen eine * .gcno
-Datei neben dem Code.
$ ls chain_of_responsibility/lib/
chain_element.c chain_element.h chain_element.o chain_of_responsibility.gcno chain_of_responsibility.map libchainofresp.la Makefile.am
chain_element.gcno chain_element.lo chain_of_responsibility.c chain_of_responsibility.lo chain_of_responsibility.o Makefile Makefile.in
Führen Sie dann den Test aus und Sie sehen die Abdeckung. Es scheint, dass Sie damit auch eine automatische Abdeckung erhalten können.
Ich habe es jetzt getestet. Mal sehen, das Ergebnis! Selbst wenn dies der Fall ist, wird das Ergebnis als Binärdaten ausgegeben, sodass es nur dann angezeigt wird, wenn Sie es für den Menschen nicht sichtbar machen. Der einfachste Weg, das Ergebnis zu verstehen, ist die Verwendung von "lcov".
Siehe das Verfahren von hier
make install
$lcov -c -d . -o XXX.info
$genhtml -o . XXX.info
Wenn Sie "index.html" öffnen, sehen Sie die Abdeckungsrate wie folgt. Leitungsabdeckung ist die sogenannte C0-Abdeckung.
In diesem Beispiel ist der Testcode natürlich fehlerfrei, daher ist die Rate niedrig, aber lib beträgt 90% oder mehr. Wenn Sie das Innere öffnen, können Sie den Code sehen, der nicht bestanden wird. Da es sich jedoch auch um ein abnormales System wie einen Malloc-Fehler handelt, kann gesagt werden, dass es unter dem Gesichtspunkt der Abdeckung kein Problem mit der Testabdeckung gibt. Es ist wie es ist.
Wenn ich es das nächste Mal berühre, möchte ich etwas tiefer graben und es mit dem Testskript verknüpfen, damit die C0-Abdeckungsrate automatisch überprüft werden kann!
gcov http://iyukki.blog56.fc2.com/blog-entry-154.html
lcov http://d.hatena.ne.jp/t-kado/20100622