web-dev-qa-db-ja.com

Golangテスト:「テストファイルなし」

パッケージディレクトリ内に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)
        }
    }
}

私がそれを実行しようとするたびに、出力は

exampleFolder[no test files] 

これは私の行く環境です

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"

どんな助けも大歓迎です。ありがとう!!

36
Juan M

テストを含むファイルは、_name_test_という接尾辞を付けて__test_と呼ぶ必要があります。 From Goコードの記述方法

TestXXXという署名func (t *testing.T)という名前の関数を含む__test.go_で終わる名前のファイルを作成して、テストを作成します。テストフレームワークは、このような各機能を実行します。関数が_t.Error_や_t.Fail_などの失敗関数を呼び出す場合、テストは失敗したと見なされます。

38
Ainar-G

ルートパッケージにテストファイルがなく、go test -vを実行してもサブパッケージはテストされず、ルートパッケージのみがテストされる可能性があります。

例えば

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

ご覧のとおり、ルートパッケージにはテストファイルはなく、main.goファイルのみがあります。 「テストファイルなし」が表示されます。

解決策は、現在の作業ディレクトリ内のすべてのパッケージを再帰的にテストすることです

go test -v ./...

または govendor を使用する場合

govendor test +local

または、テストするパッケージ(ディレクトリ)を指定できます

go test -v ./packagename

または、パッケージを再帰的にテストします

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

_testファイル内のテスト関数は、接頭辞「Test」で始まる必要があります

良い:

func TestName (

悪い:

func NameTest (

この関数はテストとして実行されず、報告されたエラーの結果

7
PodTech.io

私は同じ問題に直面しました。以前の回答に加えて、パッケージのフォルダー名がtestingの場合、テストを実行できないときに問題が見つかります。

以下の問題の端末デモ:

testingフォルダー名:

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

testingフォルダー名なし:

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

私の場合、それは役に立ちました

0
fonjeekay