我有一个带有二进制文件的项目,其入口点位于./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.gogo 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.gomain_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/

10-11 22:36
查看更多