Dans le code de production, il est souvent souhaitable d'utiliser des constantes pour des valeurs stables comme les URL de base. Cependant, cela peut poser des problèmes lors des tests, car l'implémentation par défaut de const dans Go ne permet pas la réaffectation.
Considérez l'extrait de code suivant, qui tente de redéfinir la constante baseUrl dans le fichier de test :
<code class="go">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 // throws error: const baseUrl already defined</code>
Ce code échouera avec l'erreur const baseUrl déjà définie, car Go ne permet pas de redéfinir les constantes.
Pour activer constantes adaptées aux tests, pensez à refactoriser votre code. Au lieu d'utiliser une constante globale, créez une fonction qui prend la valeur constante comme paramètre :
<code class="go">const baseUrl_ = "http://google.com" func MyFunc(baseUrl string) { // Use baseUrl }</code>
Dans le fichier de test, vous pouvez redéfinir le paramètre baseUrl sans affecter le code de production :
<code class="go">// in main_test.go ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { ... } myFuncImpl(ts.URL) // Call the function with the test URL</code>
Cette approche vous permet de tester votre code avec différentes valeurs de constante tout en préservant l'implémentation d'origine. La fonction d'origine MyFunc() utilise toujours la valeur constante de production, garantissant la stabilité pour les scénarios non-tests.
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!