Kedvenc hobbi projektemen, a világ legjobb Praegustator-ján dolgozva eljutottam a pontra, hogy van némi kód, ami működés szerű jeleket produkál, úgyhogy a verziókövetés után ideje CI-t is csinálni neki.

Gitlab CI

Mivel a projektet jelenleg a Gitlab szolgáltatásában tárolom, gondoltam ideje kipróbálni a CI szolgáltatásuk is. Elégedett vagyok a szolgáltatásukkal, egész jól dokumentált, intuitív. Nekem elég az ingyenes csomagjuk is, mivel néhány havonta pár nap pár commitot foglalkozok csak a projekttel, de amúgy sem túl drága a szolgáltatásuk. Amúgy a TravisCI által meghonosított a git repository gyökérkönyvtárában levő, a kóddal együtt verziózott CI recept alapú megközelítést alkalmazzák, ami jelenleg a legjobb módszer szeritnem a CI-ra. A vetélytársaikkal ellentétben azonban a privát repositorykra is elérhetőek a CI buildek, bőséges ingyenes beetetős build kapacitással. Ezen kívül build artifacteket is kezel a rendszer.

Összeségében a Gitlab CI-t egy kellemesen használható eszköznek találtam, bár voltak döccenők a build file tesztelése során, de ezzel együtt is ajánlott eszköz.

Mostanra mondjuk a Microsoft Azure DevOps Pipelnes is kezd felzárkózni, már az is tudja a kód mellett verziózott build recepteket, konténer alapú build környezeteket, és szintén tekintélyes mennyiségű ingyenes privát buildidős kapudrog jár a szolgáltatásaikhoz, ráadásul Windows alapú build környezetek is elérhetőek elvileg. (Ezt még nem próbáltam, de kilátásban van, hogy szükségem lesz rá. Majd beszámolok a tapasztalatokról, ha lesznek.)

A CI receptet tehát gyorsan felélesztettem, és gondoltam jó lenne egy kis code coverage a tesztekhez. Nosza, nézzük meg, mik a lehetőségek a .Net Core világában!

Teszt fedettség mérés, ahogy azt a Microsoft elképzeli

A Microsoft állítólagos legendás megújulása még gyerekcipőben jár. Még mindig a GUI nyomkodós, scriptelést VBA Excel makróban elképzelő szemlélet uralkodik sajnos például a tesztek fedettségének a mérése területén.

Megnéztem, mik a lehetőségek megmérni a kódom tesztfedését, és megdöbbenve láttam, hogy csak a Visual Studio Enterprise csomagban található a szükséges eszköz. Standalone nem érhető el, se ingyen, se pénzért. Meg kell venni a fejlesztőkörnyezetet, ami első évben 6000$, majd 2570$ évente! Nem fogom az EULA-t elolvasni, de a build gépre tuti kellene még egy licenc, ahogy ismerem őket. Nem igazán érzik, hogy mi a minimum amit manapság ingyen kell adni, ha a platformodra akarod a fejlesztőket csábítani. Viszont már lehet cli-ből használni. Miután a 20 Gigabyteos devenvet feltetted. 😩

Szerencsére a GitHub hibajegy végefelé saját ingyenes, nyílt forráskódú termékét hirdeti alternatívaként egy hozzászóló, a kiváló Coverlet-et.

Coverlet

A Coverlet ingyenes, nyílt forráskódú, és nekem épp eleget tud. Ráadásul könnyű használni, és egyből működik, minden komplikáció nélkül!

A GitHubon itt, NuGeten pedig itt lehet elérni.

Lehet parancssorból vagy msbuildből használni. Én egy pár soros kimenet feldolgozó scripttel integráltam a Gitlabos buildemhez az msbuild változatot.

Többféle elterjedt kimeneti formátumot támogat a saját json alapú kimenetén felül, hogy könnyebb legyen integrálni meglevő rendszerekkel. Én a cobertura formátumot használtam fel.

Osztály fedést, metódus fedést, sor fedést (statement coverage) és elégazás fedést (branch coverage) mér, a komplexebb MCDC fedést nem méri, viszont nyílt projekt, akinek erre van igénye, szerintem bátran felajánlhatja a közösségnek a fejlesztését 🙂.

Amennyiben a kód fedettsége egy kritikus szint alá esik, el tudja buktatni a buildet igény szerint.

Különböző kódok kizárhatóak a mérésből (pl. WCF generált kód esetén lehet értelme). Ezt lehet a parancssorból, vagy attribútuumokkal annotálás segítségével is elérni.

Összeségében nagyon jól használható eszköz. Eddigi Microsoft utilitykkel kapcsolatos élményeim alapján az a gyanúm, hogy már most jobb mint a Microsoft aranyárban mért terméke, ráadásul nuggettel telepíthető a projektbe, nem kell egy teljes fejleszői környezetet feltenni hozzá a build gépre.

Nekem nagyon tetszett, azon ritka szoftverek egyike, amit azonnal megszerettem, és a használata során sem utáltam meg, egy kicsit sem! Pont azt tudja amit akarok, és könnyen lehet használni. Ajánlom mindenkinek! 💯👌