O teste de software é um processo que avalia as métricas de programas usando ferramentas, scripts ou manualmente.

O teste é parte integrante do ciclo de desenvolvimento de software. Testes abrangentes fornecem informações detalhadas sobre a integridade de seu aplicativo.

Você pode prevenir e corrigir bugs escrevendo testes, avaliando o desempenho do programa e automatizando fluxos de trabalho.

Introdução ao teste em Go

A biblioteca padrão Go fornece uma testando pacote. o testando O pacote tem benchmarking, fuzzing, skipping, sub-testing, sub-benchmarking e outras funcionalidades.

Testar com este pacote é fácil. Aqui está uma estrutura de teste simples que servirá como modelo para o teste:

modelo Casos estrutura {
// a saída esperada do teste
esperado int

//saída da função
real int

// o valor que você está passando para a função
argumento corda
}

Aqui está uma função simples que converte strings em inteiros. Seu teste testará esta função.

importar (
"strconv"
)

funçãoStringToInteger(str corda)int {
inteiro, err := strconv. Atoi (str)

E se err!= nada {
Retorna0
}

Retorna inteiro
}

instagram viewer

o StringToInteger função retorna 0 se houver um erro na conversão e o inteiro se não houver erros.

Aqui está uma função de teste para StringToInteger:

funçãoTestStringToInteger(teste * teste. T) {
esperadoInt := StringToInteger("3")

caseInstance := Cases {
esperado: esperadoInt,
real: 3,
}

E se caseInstance.expected == caseInstance.actual {
// algum código aqui
} senão {
teste. Falhou()
}
}

o TestStringToInteger função de teste aceita um teste. T objeto como seu argumento. o esperadoInt variável contém o resultado da conversão de string. o caseInstance variável é a estrutura Cases instanciada para o teste. o E se A instrução compara os valores esperados e reais.

o Falhou retorna um teste com falha na instrução else se os valores não forem iguais.

Go fornece um teste comando para automatizar e recuperar informações sobre seus testes e programas.

vai teste
vai teste de ajuda

A página de ajuda fornece informações detalhadas sobre como vá testar funciona:

O ecossistema Go abriga muitas bibliotecas que tornam os testes mais acessíveis e flexíveis. Há muitas funcionalidades além do testando pacote, incluindo regressão e teste de unidade.

O Pacote de Testemunhos

O pacote Testificar é um dos frameworks Go mais populares para testar pacotes. Ele fornece as ferramentas necessárias para escrever testes eficientes, com funções fáceis de asserções, simulações e suítes de testes.

Testify é adequado para desenvolvimento orientado a testes, pois o pacote fornece um zombar pacote. Isso fornece um mecanismo para escrever objetos simulados que você pode usar no lugar de objetos reais em testes.

O pacote também oferece:

  • Um afirmar pacote que fornece métodos úteis para escrever testes amigáveis ​​e legíveis.
  • UMA exigir pacote semelhante ao afirmar pacote para retornar resultados booleanos.
  • UMA suíte pacote para suítes de teste com structs.

Testemunhar estende-se no testando pacote, e você pode usar o vá testar comando para executar testes escritos com o pacote Testify.

O Testify é compatível com as versões Go a partir de 1.13. Você pode adicionar o pacote como uma dependência do projeto com este comando:

vai obtenha github.com/stretchr/testify

Aqui está um teste de asserção simples com o pacote Testify afirmar pacote:

pacote a Principal

importar (
"teste"
"github.com/stretchr/testify/assert" // afirma apenas o pacote
)

// o nome da função deve ser "Algo" por convenção
funçãoTestSomething(t * teste. T) {
//afirmando a igualdade
afirmar. Igual (t, 123, 123, "devem ser iguais")

// afirmando a desigualdade
afirmar. NotEqual (t, 123, 456, "eles não devem ser iguais")
}

o TestSomething função de teste leva a estrutura de tipo de teste do testando pacote como um argumento. o Igual e Não igual métodos são para afirmações baseadas em igualdade e desigualdade de Testify's afirmar pacote.

O pacote GoConvey

GoConvey é uma ferramenta de teste Go preparada para expressividade sobre o testando pacote. Inclui terminal (CLI) e navegador (GUI) funcionalidade de teste.

O pacote GoConvey integra-se com o testando pacote, fornecendo uma interface de usuário da web para trabalhar com testes Go nativos. Também inclui funcionalidade para testes de regressão, saídas personalizáveis ​​e geração de código de teste. Você pode executar testes automaticamente, acessar formatos de cobertura em HTML e personalizar a GUI.

Execute este comando no terminal do seu espaço de trabalho Go para instalar o pacote Go Convey.

vai obtenha github.com/smartystreets/goconvey

Aqui está um exemplo simples de como escrever testes com o pacote GoConvey.

pacote a Principal

importar (
. "github.com/smartystreets/goconvey/convey"
"teste"
)

funçãoTestSomething(t * teste. T) {
// Apenas passa t para chamadas de transmissão de nível superior
Convey("Declarar variável", t, função() {
x := 1

Convey("variável de incremento", função() {
x++

Transmitir("afirmar igualdade", função() {
Então (x, ShouldEqual, 2)
})
})
})
}

Você precisará importar o comunicar pacote usando notação de ponto para o teste.

A função Transmitir do Comunicar pacote ajuda com o escopo do teste. O último Comunicar chamada de função no exemplo de código afirma a igualdade entre o x variável e 2, usando o Deveria ser igual função.

O pacote de espera HTTP

o Espera HTTP package é um pacote declarativo, conciso e fácil de usar para testes de HTTP e REST API de ponta a ponta do Go. Você pode usá-lo para criar solicitações HTTP de forma incremental e inspecionar as respostas e suas cargas de forma recursiva.

o httpesperar package é um conjunto de construtores encadeados para solicitações e declarações HTTP em respostas e cargas úteis de HTTP. Ele é construído sobre http, testando, e outros pacotes. O pacote também funciona bem com o built-in httptest pacote.

httpesperar fornece funcionalidade para criação de solicitação com construção de URL, cabeçalhos, cookies e cargas úteis. Ele lida com asserções de resposta, asserções de carga útil, impressão bonita e WebSockets.

Execute este comando no terminal do seu diretório de trabalho para instalar o httpesperar pacote.

vai obtenha github.com/gavv/httpexpect

Aqui está um exemplo simples de teste de uma função de manipulador com o httpesperar pacote.

pacote a Principal

importar (
"fm"
"github.com/gavv/httpexpect/v2"
"rede/http"
"net/http/httptest"
"teste"
)

funçãoexampleHandler()http.Manipulador {
Retorna http. HandlerFunc(função(escritor http. ResponseWriter, solicite *http. Solicitar) {
fmt. Fprintln (escritor, "Hello World")
})
}

funçãoManipulador de exemplo de teste(t * teste. T) {
// cria http. Manipulador
manipulador := exemploHandler()

// executa o servidor usando httptest
servidor := httptest. NewServer (manipulador)
adiar servidor. Perto()

// cria instância http expect
esperar := httpesperar. Novo (t, servidor. URL)

// está funcionando?
Espero. PEGUE("/").
Espero().
Estado (http. StatusOK).JSON().Array().Empty()
}

o exampleHandler função handler retorna um handler HTTP para o httpesperar pacote. o Manipulador de exemplo de teste function declara uma instância da função do manipulador. Em seguida, ele cria um novo servidor para testar o endpoint com o httptest pacote.

o Espero variável é sua httpesperar instância que atinge o PEGUE solicite o caminho raiz do endpoint no servidor. o Status função retorna o código de estado (nesse caso, 200) se o teste for bem-sucedido.

Escreva testes abrangentes e intuitivos

Os testes percorrem um longo caminho para avaliar a integridade de seu aplicativo, e há muitos padrões e métodos de teste que você pode usar para seus programas. No centro do seu fluxo de trabalho de teste, você deve escrever testes intuitivos que possam ser aprimorados à medida que seus programas mudam ao longo do tempo.