web-dev-qa-db-fra.com

Test de Golang: "aucun fichier de test"

Je crée un test simple dans mon répertoire de package appelé reverseTest.go

package main

import "testing"

func TestReverse(t *testing.T) {
    cases := []struct {
        in, want string
    }{
        {"Hello, world", "dlrow ,olleH"},
        {"Hello, 世界", "界世 ,olleH"},
        {"", ""},
    }

    for _, c := range cases {
        got := Reverse(c.in)
        if got != c.want {
            t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
        }
    }
}

chaque fois que j'essaie de l'exécuter, la sortie est

exampleFolder[no test files] 

c'est mon go env

GOARCH="AMD64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="AMD64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/juan/go"
GORACE=""
GOROOT="/usr/lib/go"
GOTOOLDIR="/usr/lib/go/pkg/tool/linux_AMD64"
TERM="dumb"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CXX="g++"
CGO_ENABLED="1"

Toute aide sera fortement appréciée. Merci!!

36
Juan M

Les fichiers contenant des tests doivent être appelés name_test, Avec le suffixe _test. De Comment écrire du code Go :

Vous écrivez un test en créant un fichier dont le nom se termine par _test.go Qui contient des fonctions nommées TestXXX avec la signature func (t *testing.T). Le cadre de test exécute chacune de ces fonctions; si la fonction appelle une fonction d'échec telle que t.Error ou t.Fail, le test est considéré comme ayant échoué.

38
Ainar-G

Il est possible que vous n'ayez aucun fichier de test dans le package racine et que vous exécutiez go test -v ne teste pas les sous-packages, uniquement le package racine.

Par exemple

.
├── Dockerfile
├── Makefile
├── README.md
├── auth/
│   ├── jwt.go
│   ├── jwt_test.go
├── main.go

Comme vous le voyez, il n'y a pas de fichiers de test dans le package racine, seulement le fichier main.go. Vous obtiendrez "aucun fichier de test".

La solution consiste à tester récursivement tous les packages du répertoire de travail en cours

go test -v ./...

Ou si vous utilisez govendor

govendor test +local

Ou vous pouvez spécifier le package (répertoire) à tester

go test -v ./packagename

Ou tester un package récursivement

go test -v ./packagename/...
46
blockloop

Votre fonction de test dans votre fichier _test doit commencer par le préfixe "Test"

BIEN:

func TestName (

MAUVAIS:

func NameTest (

Cette fonction ne sera pas exécutée comme un test et les résultats avec l'erreur signalée

7
PodTech.io

J'ai rencontré le même problème. En plus des réponses précédentes, je trouve un problème lorsqu'il est impossible d'exécuter le test si le nom du dossier de votre package est testing.

Démonstration terminale du problème ci-dessous:

avec testing nom du dossier:

~/go/src/testing$ go test
?       testing [no test files]

sans testing nom du dossier:

~/go/src/testing_someothername$ go test
PASS
ok      testing_someothername   0.089s

Dans mon cas, c'était utile

0
fonjeekay