Maison  >  Article  >  développement back-end  >  Comment tester le code Go qui repose sur des valeurs constantes ?

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

DDD
DDDoriginal
2024-11-04 07:09:31677parcourir

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>

À 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>

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>

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>

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>

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!

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