我有一个带有二进制文件的项目,入口点位于./cmd/<my-project>/main.go. 我在./cmd/<my-project>/main_test.go.
现在我想从存储库根目录执行这个基准测试。我试图以go test -bench=./cmd/<my-project>/main各种交替方式(例如go test -bench=./cmd/<my-project>/main_test.go或go test -bench=./cmd/<my-project>)执行类似的操作,但我无法让它工作。
我总是得到的错误是:
can't load package: package github.com/<username>/<my-project>: no Go files in /home/<user>/go/src/github.com/<username>/<my-project>
这是真的,*.go我的项目根目录中没有文件。
我想出的只是首先切换到目录并使用`go test -bench= 运行基准测试。
然而,由于我的程序依赖于当前的工作目录,结果在很大程度上取决于能够在另一个目录而不是目录中执行它会很棒cmd/<my-project>。(如果这好不好不是问题的一部分:))
第一条评论后更新:
我让它运行,go test -bench=. /cmd/<my-project>但基准测试被执行,就好像它会在./cmd/<my-project>目录中运行一样。我注意到“正常测试”中的类似行为 - 但这对我来说在任何时候都不是问题。
因此,我的程序确实会根据当前工作目录扫描当前目录中的文件目录,这会导致仅找到两个文件 (main.go和main_test.go),其中基准测试并没有真正的帮助。
So to run the benchmarks:
go test -bench=. ./cmd/<my-project>
Run Code Online (Sandbox Code Playgroud)
但是,您希望控制工作目录,因此您确实希望从其他地方运行它。你要找的是-c国旗。它将创建一个二进制文件而不是运行测试。然后,您可以在需要的地方运行二进制文件(以及您的测试和基准测试)。
go test -c ./cmd/my_proj
my_proj.test -test.bench=.
Run Code Online (Sandbox Code Playgroud)
注意:test.编译测试时,标志带有前缀。