Тест 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"
Любая помощь будет оценена. Спасибо!!
Ответы
Ответ 1
Файлы, содержащие тесты, следует называть name_test
, с суффиксом _test
. Из Как написать код перехода:
Вы пишете тест, создав файл с именем, заканчивающимся на _test.go
, который содержит функции с именем TestXXX
с подписью func (t *testing.T)
. Каждая такая функция выполняет тестовую структуру; если функция вызывает функцию сбоя, такую как t.Error
или t.Fail
, считается, что тест потерпел неудачу.
Ответ 2
Возможно, у вас нет тестовых файлов в корневом пакете, и при запуске 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/...
Ответ 3
Ваша тестовая функция в вашем _test файле должна начинаться с префикса "Test"
ХОРОШО:
func TestName (
ПЛОХОЙ:
func NameTest (
Эта функция не будет выполнена в качестве теста и приводит к сообщенной ошибке
Ответ 4
Я столкнулся с той же проблемой. В дополнение к предыдущим ответам я нахожу проблему, когда невозможно выполнить проверку, если имя папки вашего пакета testing
.
Терминальная демонстрация проблемы ниже:
с именем папки testing
:
~/go/src/testing$ go test
? testing [no test files]
без testing
имени папки:
~/go/src/testing_someothername$ go test
PASS
ok testing_someothername 0.089s
В моем случае это было полезно