Maison > développement back-end > Golang > le corps du texte

Comment tester le code Go qui repose sur des valeurs constantes ?

DDD
Libérer: 2024-11-04 07:09:31
original
739 Les gens l'ont consulté

How to Test Go Code That Relies on Constant Values?

Test des constantes dans Go

Un défi courant lors de l'écriture de programmes Go consiste à tester du code qui repose sur des valeurs constantes. Par défaut, les constantes ne peuvent pas être redéfinies une fois définies, ce qui rend difficile la simulation de différents environnements pendant les tests.

Scénario de problème

Considérez le code suivant :

<code class="go">package main

import (
    "net/http"
    "net/http/httptest"
)

const baseUrl = "http://google.com"

func main() {
    // Logic that uses baseUrl
}</code>
Copier après la connexion

À des fins de test, vous souhaitez définir baseUrl sur une URL de serveur de test. Cependant, redéfinir const baseUrl dans votre fichier de test entraînera une erreur :

<code class="go">// in main_test.go
const baseUrl = "test_server_url" // Error: const baseUrl already defined</code>
Copier après la connexion

Solution

Pour surmonter cette limitation, vous pouvez refactoriser votre code pour supprimer le const et utilisez une fonction à la place. Par exemple :

<code class="go">func GetUrl() string {
    return "http://google.com"
}

func main() {
    // Logic that uses GetUrl()
}</code>
Copier après la connexion

Dans votre fichier de test, vous pouvez redéfinir la fonction pour renvoyer l'URL du serveur de test :

<code class="go">// in main_test.go
func GetUrl() string {
    return "test_server_url"
}</code>
Copier après la connexion

Une autre approche

Si vous préférez conserver la valeur const, vous pouvez créer une deuxième fonction qui prend l'URL de base comme paramètre et délègue l'implémentation réelle à la fonction d'origine :

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

func MyFunc() string {
    // Call other function passing the const value
    return myFuncImpl(baseUrl_)
}

func myFuncImpl(baseUrl string) string {
    // Same implementation that was in your original MyFunc() function
}</code>
Copier après la connexion

En utilisant cette approche, vous peut tester l'implémentation de MyFunc() en testant myFuncImpl(), en transmettant différentes URL de base pour chaque scénario de test. De plus, la fonction MyFunc() d'origine reste sûre car elle transmet toujours la constante baseUrl_ à myFuncImpl().

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal