"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como você pode redefinir constantes para fins de teste no Go?

Como você pode redefinir constantes para fins de teste no Go?

Publicado em 2024-11-21
Navegar:702

How Can You Redefine Constants for Testing Purposes in Go?

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.

Tutorial mais recente Mais>

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