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!