Golang测试:"没有测试文件"

Jua*_*n M 38 testing terminal go

我正在我的包目录中创建一个名为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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

每当我尝试运行它时,输出就是

exampleFolder[no test files] 
Run Code Online (Sandbox Code Playgroud)

这是我的环境

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"
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.谢谢!!

blo*_*oop 51

您可能在根软件包中没有任何测试文件,并且运行go test -v不测试子软件包,只测试根软件包.

例如

.
??? Dockerfile
??? Makefile
??? README.md
??? auth/
?   ??? jwt.go
?   ??? jwt_test.go
??? main.go
Run Code Online (Sandbox Code Playgroud)

如您所见,根软件包中没有测试文件,只有main.go文件.你会得到"没有测试文件".

解决方案是运行

go test -v ./...
Run Code Online (Sandbox Code Playgroud)

或者如果你使用govendor

govendor test +local
Run Code Online (Sandbox Code Playgroud)

  • 这有帮助.要运行非主程序包的测试(在子目录中):`go test -v ./ <package_name>`运行该特定程序包的测试. (3认同)

Ain*_*r-G 40

name_test使用_test后缀调用包含测试的文件.从如何写代码:

您通过创建一个名称以文件结尾的文件来编写测试,该文件_test.go包含以TestXXXsignature 命名的函数func (t *testing.T).测试框架运行每个这样的功能; 如果函数调用诸如t.Error或的失败函数t.Fail,则认为测试失败.

  • 除此之外,您的测试方法应与测试代码位于同一个包中,而不是您的问题中的主要方法. (3认同)
  • @thwd测试方法不需要(并且很多次不应该)与测试代码在同一个包中. (3认同)

Pod*_*.io 9

_test文件中的测试函数必须以前缀“ Test”开头

好:

func TestName (
Run Code Online (Sandbox Code Playgroud)

坏:

func NameTest (
Run Code Online (Sandbox Code Playgroud)

此功能将不会作为测试执行,并且会报告错误


Sum*_*mer 6

要运行所有测试,请使用以下命令

> go test ./...
//For verbose output use -v flag
> go test -v ./...
Run Code Online (Sandbox Code Playgroud)