Testando constantes no Go
No Go, as constantes são uma ferramenta valiosa para garantir a consistência e a correção do código. No entanto, quando se trata de testes unitários, o uso de constantes pode criar desafios. Este artigo explora como redefinir constantes especificamente para fins de teste em Go.
O desafio com constantes
Constantes em Go são valores imutáveis que não podem ser modificados durante a execução do programa. Esta imutabilidade garante a integridade do estado do programa e evita alterações acidentais. No entanto, durante o teste, pode ser necessário modificar temporariamente as constantes para testar cenários específicos.
Uma abordagem amigável para testes
Considere o seguinte exemplo:
package main
const baseUrl = "http://google.com"
// in main_test.go
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
...
}))
const baseUrl = ts.URL // Error: const baseUrl already defined
Neste exemplo, queremos usar um servidor de teste em vez de chamar a API remota para teste. Para fazer isso, precisamos redefinir baseUrl com a URL do servidor de teste. No entanto, Go gera um erro porque a constante baseUrl já está definida.
Solução: refatorar para testabilidade
Para facilitar o teste, podemos refatorar ligeiramente o código introduzindo uma função adicional:
const baseUrl_ = "http://google.com"
func MyFunc() string {
// Call other function passing the const value
return myFuncImpl(baseUrl_)
}
func myFuncImpl(baseUrl string) string {
// use baseUrl
// Same implementation that was in your original MyFunc() function
}
Neste código refatorado, a função MyFunc original delega sua implementação a myFuncImpl, que usa um parâmetro baseUrl. Isso nos permite chamar myFuncImpl diretamente de uma função de teste e passar qualquer URL base desejada.
Mantendo o código de produção seguro
A função MyFunc original permanece segura e não afetada por a refatoração. Ele sempre passa a constante baseUrl_ para myFuncImpl, garantindo que o código de produção não tenha comportamento inesperado devido a constantes modificadas.
Conclusão
Essa técnica permite que os desenvolvedores redefinam constantes para fins de teste, mantendo a integridade e a segurança do código de produção. Ao introduzir uma função adicional que fornece a mesma funcionalidade do original, os testes podem modificar constantes sem afetar o comportamento real do código.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3