Maison >développement back-end >Golang >Comment gérer le code d'initialisation pour les dépendances de test
l'éditeur php Xinyi vous présentera comment gérer le code d'initialisation des dépendances de test. Lors du développement de logiciels, vous devez souvent utiliser divers outils et frameworks de test, et ces outils et frameworks peuvent nécessiter du code d'initialisation pour la configuration et la préparation. La façon dont vous gérez ce code d'initialisation est importante pour la maintenabilité et l'évolutivité de vos tests. Ce qui suit vous présentera en détail comment gérer le code d'initialisation des dépendances de test pour vous aider à mieux effectuer le travail de test logiciel.
J'ai un wrapper de journalisation (implémenté à l'aide de logrus ci-dessous) et j'utilise ce package pour enregistrer mon application. Pour ce faire, je transmets la variable logger à chaque package requis via l'injection de dépendances.
Ici, lors de l'écriture de cas de test pour chaque package, je dois écrire du code pour initialiser le package logger. Comment pouvons-nous éviter d'écrire du code d'initialisation pour chaque cas de test d'un package qui utilise un enregistreur ?
logger/log.go
type logger interface { info(args ...interface{}) infof(format string, keyvals ...any) infowithfields(fields map[string]interface{}, msg ...interface{}) debug(args ...interface{}) debugf(format string, keyvals ...any) debugwithfields(fields map[string]interface{}, msg ...interface{}) }
app_test.go
func setupLogrusLogger() (*bytes.Buffer, Logger) { buf := &bytes.Buffer{} logrusLogger := log.New() logrusLogger.Out = buf logrusLogger.Formatter = &log.JSONFormatter{} return buf, NewLogrusLogger(logrusLogger) } func TestSomething(t *testing.T) { // buf can be used to inspect what gets logged if required buf, logger := setupLogrusLogger() Something(logger) }
Ici, pour chaque package qui utilise un logger, je dois initialiser le logger en définissant quelque chose comme setuplogruslogger
. Existe-t-il un moyen d'éviter d'écrire ceci séparément pour chaque package pour lequel j'écris des tests ? setuplogruslogger
的内容来初始化记录器。有什么方法可以避免为我正在为其编写测试的每个包单独编写此内容?
导出依赖初始化函数并在非 _test.go
_test.go
Exportez la fonction d'initialisation des dépendances et déclarez-la dans un fichier non
Et tant que vous importez uniquement un tel package d'utilitaire de test à partir d'un fichier
(et non d'un fichier normal), le code de l'utilitaire de test ne parviendra pas dans le binaire compilé du programme réel.
net/http/httptest
Des exemples de tels packages d'utilitaires de test peuvent être trouvés dans la bibliothèque standard :
net/internal/socktest
Le package httptest fournit des utilitaires pour les tests HTTP.
os/exec/internal/fdtest
Le package socktest fournit des utilitaires pour les tests de socket.
p>
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!