Maison >développement back-end >Golang >Comment gérer le code d'initialisation pour les dépendances de test

Comment gérer le code d'initialisation pour les dépendances de test

WBOY
WBOYavant
2024-02-09 18:00:15664parcourir

Comment gérer le code dinitialisation 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.

Contenu de la question

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

Solution de contournement

_test.goExportez la fonction d'initialisation des dépendances et déclarez-la dans un fichier non

afin que d'autres packages puissent l'importer et la réutiliser. Si vous souhaitez séparer la logique de test du code normal du package, vous pouvez déplacer la fonction d'initialisation dans le package qui fournit les utilitaires de test.

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/httptestDes exemples de tels packages d'utilitaires de test peuvent être trouvés dans la bibliothèque standard :

net/internal/socktestLe package httptest fournit des utilitaires pour les tests HTTP.

os/exec/internal/fdtestLe package socktest fournit des utilitaires pour les tests de socket. p>

testing/quickLe package fdtest fournit des aides de test pour travailler avec des descripteurs de fichiers sur plusieurs exécutables.

testing/fstestPackage Quick implémente des fonctions utilitaires pour faciliter les tests en boîte noire.

testing/iotestLe package fstest implémente la prise en charge des implémentations de tests de système de fichiers et des utilisateurs.

🎜🎜 🎜Le package iotest implémente des lecteurs et des rédacteurs principalement à des fins de 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer