Maison  >  Article  >  développement back-end  >  Comment exécuter « go test » dans un répertoire parent avec plusieurs modules Go ?

Comment exécuter « go test » dans un répertoire parent avec plusieurs modules Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-02 21:51:30865parcourir

How to Run `go test` in a Parent Directory with Multiple Go Modules?

Exécution du test Go dans le répertoire parent de plusieurs modules Go

Lorsque vous travaillez avec une structure de répertoires contenant plusieurs modules Go, tels que :

<code class="pre">/root
    /one
        go.mod
        go.sum
        main.go
        main_test.go
    /two
        go.mod
        go.sum
        main.go
        main_test.go</code>

Exécution du test go . ou allez tester ./... depuis le répertoire racine (/root) peut entraîner une erreur indiquant qu'aucun package n'a été trouvé. En effet, go test s'attend à fonctionner sur un seul module.

Pour surmonter cette limitation, une approche consiste à utiliser une astuce shell. Par exemple, la commande suivante doit parcourir les sous-répertoires et exécuter go test ./... dans chacun d'eux :

<code class="pre">find . -type d -name main_test.go -exec go test '{}/' \;</code>

Alternativement, de nombreux projets implémentent un Makefile ou un script de test qui effectue cette opération. Par exemple, un script test.sh pourrait inclure :

<code class="pre">for i in $(find . -type d -name main_test.go | sed 's|main_test.go||'); do
    cd $i
    go test ./...
    cd ..
done</code>

Ce script parcourrait le référentiel, passerait à chaque sous-répertoire contenant un fichier main_test.go, exécuterait go test ./..., puis retournerait au répertoire parent.

Les projets plus importants peuvent conserver une liste de tous leurs modules, comme celui maintenu par le projet go-cloud (https://github.com/google/go-cloud/blob/ maître/tous les modules). Cette liste peut être utilisée par des scripts pour parcourir les modules et effectuer diverses opérations, y compris l'exécution 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:
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