enquanto trabalha em um projeto usando o operador-sdk eu descobri que a cobertura de teste era bastante baixa. A razão foi que um monte de arquivos deepcopy gerados no repo devido ao operador-sdk.

Primeiro eu estou usando o seguinte repo para adicionar cores para meus testes para facilitar a leitura

go get -u github.com/rakyll/gotest

cor testes
eu testar o diretório pkg que eu testei com o comando a seguir

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

Este é executado o teste e saídas de cobertura de teste para um arquivo de cobertura.você pode verificar a cobertura localmente, utilizando o html bandeira

go tool cover -html=coverage.out


Ou você pode usar a func bandeira que dar-lhe as funções de porcentagem de cobertura no cli

go tool cover -func=coverage.out

Refinando a cobertura

Como eu nunca foi e nunca vai testar os arquivos gerados eu decidi ver se eu poderia removê-los do nosso relatório de cobertura de código. No início eu olhei para a bandeira go test-run no seguinte formato.

gotest ./packagedirectory -run=testname

descobri que teria muita manutenção para actualizar. Eu tentei usá-lo com regex para tentar e acertar todos os testes, mas descobri que com uma expressão regex ganancioso como -run=^Test.+ eu iria bater todos os testes, mas também todos os arquivos, então eu estava de volta onde eu comecei.

como o seguinte diretório pkg / apis foi onde os arquivos deepcopy gerados foram localizados. Eu movi os arquivos que eu estava testando para um de pkg/apis para um sub pacote chamado tipos e filtrou meus testes Por diretório em vez disso. Então o meu comando de teste parecia

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

isto executa os testes nos diretórios listados acima e atualiza a cobertura.fora apenas com os arquivos neste diretório. Isto aumentou a minha cobertura global em cerca de 14%

CI/CD e macalls

estávamos a usar Travis para CI / CD e configurar macalls com a seguinte configuração em .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

Para obter mais informações sobre a configuração de -repotoken=$COVERALLS_TOKEN
Veja os goveralls repo https://github.com/mattn/goveralls e https://docs.coveralls.io/go

Com esta configuração podemos, então, verificar a nossa cobertura como parte do PR , Esta não substitui a escrita de testes, mas não eliminar arquivos gerados a partir do relatório de cobertura.

Myblog

Deixe uma resposta

O seu endereço de email não será publicado.