我有一个带有二进制文件的项目,其入口点位于./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
),其中基准测试并没有真正帮助。
最佳答案
因此,运行基准测试:
go test -bench=. ./cmd/<my-project>
但是,您要控制工作目录,因此实际上您想从其他地方运行它。您正在寻找的是
-c
标志。它将创建一个二进制文件而不是运行测试。然后,您可以在所需的位置运行二进制文件(以及测试和基准测试)。go test -c ./cmd/my_proj
my_proj.test -test.bench=.
注意:编译测试时,标志带有
test.
前缀。关于go - 从项目根目录运行子文件夹基准,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53493340/