în timp ce lucrați la un proiect folosind operatorul-sdk, am constatat că acoperirea testului a fost destul de scăzută. Motivul a fost acela al multor fișiere deepcopy generate în repo datorită operatorului-sdk.

mai întâi folosesc următorul repo pentru a adăuga culori la testele mele pentru lizibilitate

go get -u github.com/rakyll/gotest

teste de culoare
testez directorul pkg pe care l-am testat cu comanda follow

gotest -v -covermode=count -coverprofile=coverage.out ./pkg/...

aceasta rulează testul și scoate acoperirea testului într-o acoperire a fișierului.out puteți verifica acoperirea local folosind steagul html

go tool cover -html=coverage.out


sau puteți utiliza steagul func care vă oferă acoperirea procentuală a funcțiilor în cli

go tool cover -func=coverage.out

rafinarea acoperire

ca nu am fost niciodată de gând să testeze fișierele generate am decis pentru a vedea dacă aș putea să le eliminați din raportul nostru de acoperire cod. La început m-am uitat la steagul Go test-run în următorul format.

gotest ./packagedirectory -run=testname

am constatat că ar avea prea mult de întreținere pentru a actualiza. Am încercat să-l folosesc cu regex pentru a încerca să lovesc toate testele, dar am constatat că, cu o expresie Regex lacomă precum -run=^Test.+, aș lovi toate testele, dar și toate fișierele, așa că m-am întors de unde am început.

ca următorul Director pkg/API-uri a fost locul în care au fost localizate fișierele deepcopy generate. Am mutat fișierele pe care am fost de testare la o de la pkg/API-uri la un sub pachet numit tipuri și filtrat testele mele de director în loc. Deci, comanda mea de testare arăta ca

gotest -v -covermode=count -coverprofile=coverage.out ./pkg/controller/... ./pkg/providers/... ./pkg/resources/... ./pkg/apis/integreatly/v1alpha1/types/...

aceasta rulează testele din directoarele enumerate mai sus și actualizează acoperirea.afară cu doar fișierele din acest director. Acest lucru a crescut acoperirea mea generală cu aproximativ 14%

CI/CD și combinezoane

am fost folosind Travis pentru CI/CD și setup combinezoane cu următoarea configurare în .travis.yml.

language: gosudo: requireddist: bionicgo: - 1.13.xenv: - GO111MODULE=onaddons: apt: update: true packages: - "python3" - "python3-pip" - "python3-setuptools"git: depth: 1stages: - name: test - name: push if: fork = false - name: manifest if: fork = false AND tag IS presentbefore_install: - go get github.com/mattn/goverallsjobs: include: - stage: test script: - go get github.com/mattn/goveralls - go get -u github.com/rakyll/gotest - gotest -v -covermode=count -coverprofile=coverage.out ./pkg/controller/... ./pkg/providers/... ./pkg/resources/... ./pkg/apis/integreatly/v1alpha1/types/... - $GOPATH/bin/goveralls -coverprofile=coverage.out -service=travis-ci -repotoken=$COVERALLS_TOKEN

pentru mai multe informații despre configurarea -repotoken=$COVERALLS_TOKEN
consultați goveralls repo https://github.com/mattn/goveralls și https://docs.coveralls.io/go

cu această configurare putem verifica apoi acoperirea noastră ca parte a PR , aceasta nu înlocuiește testele de scriere, ci elimină fișierele generate din raportul de acoperire.

Blog

Lasă un răspuns

Adresa ta de email nu va fi publicată.