Uma Introdução ao teste em Go
teste é extremamente importante em todos os softwares. Ser capaz de garantir a correção do seu código e garantir que quaisquer mudanças que você faça não acabem quebrando qualquer outra coisa em diferentes partes da sua base de código é extremamente importante.Ao tomar o tempo necessário para testar adequadamente os seus programas go, permite-se desenvolver mais rapidamente com um maior sentimento de confiança de que o que está a desenvolver continuará a funcionar quando o lançar à produção.
Goals
By the end of this tutorial, you will have a good grap of testing basic functions and methods in Go using the standard "testing"
package.
terá tido experiência na redacção de testes de condução de tabelas e também poderá gerar resultados mais descritivos dos seus testes utilizando as várias bandeiras disponíveis.
Tutorial em vídeo
este tutorial pode ser encontrado no formato de vídeo, se preferir:
introdução
neste tutorial vamos ver como você pode desenvolver e executar testes para o seu código go usando o comando go test
.
Go Test Files
If you have seen any go projects before, you may have noticed that most, if not all files within the project, feature a FILE_test.go
counterpart within theame directory.Isto não é um acidente. Estes são os arquivos que contêm todos os testes de unidade para o projeto e eles testam todo o código dentro de seus homólogos.Exemplo da estrutura do projecto
myproject/- calc.go- calc_test.go- main.go- main_test.go
um arquivo de teste simples
Imagine que tínhamos um programa go muito simples que era composto de um arquivo efeaturado uma função calculate()
. Esta função calculate()
simplesmente toma em um número e adiciona 2 a ela. Nice and simple to get us up and running:
If we wished to test this we could create a main_test.go
file within the samedirectory and write the following test:
package mainimport ( "testing")func TestCalculate(t *testing.T) { if Calculate(2) != 4 { t.Error("Expected 2 + 2 to equal 4") }}
executando nossos testes
agora que criamos nosso primeiro teste go, é hora de executar isso e ver se o nosso código se comporta da maneira que esperamos. Podemos executar nossos testes, executando:
$ go test
Este deve, então, algo de saída semelhante ao seguinte:
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s
Tabela Driven Testing
Agora que estamos felizes que um cálculo funciona, devemos olhar para improveconfidence adicionando um pouco mais de casos de teste em nosso código. Se quisermos construir togradualmente uma série de casos de teste que são sempre testados, podemos ver um array
de testes como assim:
aqui declaramos uma estrutura que contém tanto uma entrada quanto o valor esperado. Wethen iterate através da lista de testes com a nossa chamada for _, test := range tests
e verificar para ver se a nossa função irá sempre devolver os resultados esperados,independentemente da entrada.
quando executamos o nosso conjunto de testes agora, devemos ver a mesma saída que antes:
PASSok _/Users/elliot/Documents/Projects/tutorials/golang/go-testing-tutorial 0.007s
resultado do teste descritivo
às vezes você pode desejar ver exatamente quais testes estão rodando e quanto tempo o teste. Felizmente, isso está disponível se você usar o -v
bandeira quando em execução yourtests assim:
Você pode ver que tanto o nosso teste normal e a nossa tabela de teste correu e passou e tookless de 0.00s
executar.
Checking Test Coverage
Test coverage is a metric that I have seen abused at times by companies. Estas empresas fixam objectivos em todos os seus sistemas, tais como “a base de dados do código deve ser coberta por, pelo menos, 75% dos testes”.
mas este tipo de alvos pode levar a maus comportamentos e equipes de desenvolvimento “gaming”do sistema, a fim de tentar atingir esses alvos. Eu vi pessoas em alguns dias do teamsspend escrevendo testes de unidade que testam getters e setters básicos em languagess, como Java.
Teste é muito importante, mas você tem que ser pragmático sobre como você teste yoursystems para que os testes de escrita, são proporcionando-lhe maior valor.
os dias passados a escrever testes para cobrir partes não importantes da sua base de código poderiam ter sido mais bem gastos a escrever casos de teste em torno da logiccaptured do negócio crítico dentro de seus sistemas e garantir que mais casos de borda são cobertos.
Usando a capa bandeira
Com a parte importante do caminho, vamos ver como você pode verificar o comando teste de cobertura do seu sistema usando o go test
comando:
Dentro do mesmo diretório como o main.go
e o main_test.go
arquivos, runthe seguinte:
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.006s
verá que tem 66.7%
do seu código Go total coberto por testcases.
Visualização de Cobertura
Enquanto isso 66.7%
valor pode dizer-nos o quanto o nosso código, nós testamos,não nos mostram exatamente o código que caminhos temos ou não testei.
é aqui que os go test
e os go tool cover
entram para nos ajudar a resolver este problema específico.
podemos usar a ferramenta go test
para gerar um coverprofile
que pode então ser convertido para uma visualização HTML usando o comando go tool cover
:
PASScoverage: 66.7% of statementsok github.com/TutorialEdge/an-intro-to-testing-in-go 0.008s
Você pode, em seguida, tomar este gerado coverage.out
arquivo e usá-lo para generatea página HTML que mostra exatamente quais linhas foram abordados, como por:
$ go tool cover -html=coverage.out
Isto irá abrir uma página no seu navegador de escolha que irá procurar um littlesomething como este:
Como você pode ver, a maior parte do código dentro do nosso Calculate
função é testar andfeatures Green
cobertura. Enquanto a declaração de impressão na sua função main
é Red
como esta não foi coberta por testes.
conclusão
Esperemos que tenha achado este tutorial útil! Se você precisar de mais assistência, então sinta-se à vontade para me informar na seção de comentários abaixo.