Jag börjar sakta men säkert komma igång med enhet/integrationstest av den kod jag skriver. Det hjälper och är inte allt för besvärligt när man kommit in i tankesättet. Jag använder mig av gtest och lär mig sakta men säkert dess funktioner.
Frågan man bör ställa sig är hur mycket av koden som faktiskt körs av mina tester och vilka olika vägar genom funktionerna som testas, dvs vilken kodtäckning har mina test.
gcc inkluderar verktyget gcov för att generera den här typen av information. Efter att ha lagt till kompilatorflaggorna -fprofile-arcs -ftest-coverage genereras gcov-filer när mina tester körs. Och när man sedan kör
gcov [filnamn.c]
får man en kort sammanfattning samt en gcov-fil
File 'filnamn.c' Lines executed:64.90% of 510 viacode.c:creating 'viacode.c.gcov'
Den skapade *.gcov filen innehåller information om hur många gånger varje kodrad i filen har exekverats. För att gör det smidigare att använda ville jag ha in resultatet i min editor vim. Efter lite googlande hittade jag ett vim-skript som med lite modifieringar resulterade i detta:
" Based on Gautier DI FOLCO's vcov.vim found in " https://groups.google.com/forum/#!msg/vim_use/tk9sG714b3I/LyMnXOQAqpMJ " " Modified by Åke Forslund <ake.forslund@gmail.com> hi gcovCovered ctermbg=2 hi gcovNotCovered ctermbg=1 function! Setcov(filename) exe ":sign unplace *" for line in readfile(a:filename) let d = split(line, ':') let c = substitute(d[0], " *", "", "") let l = substitute(d[1], " *", "", "") if c >= 100 let c = '*' endif if '-' != c && c !~ '#' exe ":sign define c" . c . " text=" . c . " texthl=gcovCovered" exe ":sign place " . l . " line=" . l . " name=c" . c . " file=" . expand("%:p") elseif c =~ '#' exe ":sign define cd text=# texthl=gcovNotCovered" exe ":sign place " . l . " line=" . l . " name=cd file=" . expand("%:p") endif endfor endfunction function! Unsetcov() exe ":sign unplace *" endfunction map <F11> :call Setcov(expand(@%).".gcov")<cr> map <F12> :call Unsetcov()<cr>
Skriptet finns på github med.
När jag nu trycker på F11 får jag in information om hur många gånger en viss rad anropas, alla rader som inte exekveras överhuvudtaget markeras i rött och rader som inte räknas in markeras i vitt.
Det fungerar finfint och hjälper mig extremt mycket i mina taffliga försök att skriva relevanta testfall. Ytterligare funktioner kan med all säkerhet vara önskvärt och min plan är att slipa det ytterligare. T.ex hantera en saknad .gcov-fil på ett snyggt sätt.
Etiketter: code coverage, gcc, gcov, tdd, vim
juli 28, 2020 kl. 18:14 |
I have been exploring for a bit for any high quality articles or blog posts on this sort of area . Exploring in Yahoo I at last stumbled upon this web site. Studying this info So i am happy to convey that I’ve a very excellent uncanny feeling I found out just what I needed. I most certainly will make certain to do not put out of your mind this website and give it a look regularly.|