Maison >développement back-end >Golang >Comment pouvons-nous tester les fonctions Go dépendant de constantes ?

Comment pouvons-nous tester les fonctions Go dépendant de constantes ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-01 14:25:29284parcourir

How Can We Test Go Functions Dependent on Constants?

Redéfinir les constantes dans Go pour les tests

Aperçu du problème :
Dans Go, les constantes fournissent des valeurs immuables qui ne peut être modifié après déclaration. Cependant, lors du test d'un code qui repose sur ces constantes, il devient difficile d'injecter différentes valeurs à des fins de test.

Solution proposée :
Une solution potentielle réside dans la refactorisation du code pour inclure une deuxième fonction qui prend l'URL de base comme paramètre et appelle la fonction d'origine avec la valeur constante comme argument.

Implémentation Détails :

  1. Introduire une fonction d'assistance :

    • Remplacer la constante baseUrl_ par une fonction qui accepte le URL de base en tant que argument :

      <code class="go">func myFuncImpl(baseUrl string) string {
        // Use `baseUrl` in the function
      }</code>
  2. Modifier la fonction d'origine :

    • Avoir la fonction d'origine (MyFunc()) appelle l'assistant fonction :

      <code class="go">func MyFunc() string {
        return myFuncImpl(baseUrl_)
      }</code>
  3. Préserver la constante :

    • Conserver la constante baseUrl_ comme point de référence dans la fonction MyFunc(), garantissant que la valeur constante prévue est utilisée en production code.

Avantages :

  • Maintient l'API d'origine et évite les vulnérabilités potentielles dans le code de production.
  • Permet de tester la fonction MyFunc() avec différentes valeurs sans modifier le constante.
  • Les tests peuvent accéder à une fonction dédiée (myFuncImpl()) qui permet une attribution de valeur flexible pendant les tests.

Exemple :

<code class="go">const baseUrl_ = "http://google.com"

func MyFunc() string {
    return myFuncImpl(baseUrl_)
}</code>

Dans le code de test, myFuncImpl() peut être appelé directement et attribuer des valeurs personnalisées pour URL de base :

<code class="go">func TestMyFunc(t *testing.T) {
    result := myFuncImpl("http://example.org")
    // Assertions and tests
}</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn