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
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