我们有以下项目结构:
├── Makefile
├── ...
├── src
│ ├── app
│ │ ├── main.go
│ │ ├── models
│ │ ├── ...
│ │ └── dao.go
│ │ ├── ...
│ │ └── controllers
│ │ ├── ...
│ │ └── pingController.go
│ └── test
│ ├── all_test.go
│ ├── ...
│ └── controllers_test.go
└── vendor
└── src
├── github.com
├── golang.org
└── gopkg.in
我想通过src / test中的测试来测量src / app中包的覆盖率。目前通过运行自定义脚本生成覆盖率配置文件,该脚本为应用程序中的每个包运行覆盖,然后将所有覆盖配置文件合并到一个文最近我听说在go1.10中我们可以为多个包生成覆盖范围。
所以我尝试用oneliner替换该脚本,并尝试运行
GOPATH=${PROJECT_DIR}:${PROJECT_DIR}/vendor go test -covermode count -coverprofile cover.out -coverpkg all ./src/test/...
它给了我“ok测试0.475s覆盖率:0.0%的所有陈述”
当我这样做时
cd src/test/
GOPATH=${PROJECT_DIR}:${PROJECT_DIR}/vendor go test -covermode count -coverprofile cover.out -coverpkg all
日志显示规格已经运行且测试成功,但我仍然有“覆盖率:所有语句的0.0%”和空封面。
在测试中通过测试正确计算应用程序中软件包的覆盖范围,我错过了什么?
答案 0 :(得分:0)
您无法使用go test
的当前状态,但始终可以使用第三方脚本。
答案 1 :(得分:0)
简短回答:
go test -race -coverprofile=coverage.txt -covermode=atomic ./... # Run all the tests with the race detector enabled
go test -bench=. -benchmem ./... # Run all the benchmark for 3s and print memory information
为了为Go代码创建测试,您必须创建一个与代码名称相同的文件(在根代码的同一文件夹中),并在名称后附加“ _test”。包装也必须相同。
因此,如果我有一个名为strings.go
的GO代码,则必须将相对测试套件命名为:strings_test.go
。
此后,您必须创建一个输入t *testing.T
的方法
结构,方法的名称必须以Test
或Benchmark
单词开头。
因此,如果strings.go
包含一个名为“ IsUpper”的方法,则相关的测试用例就是一个名为TestIsUpper(t *testing.T)
的方法。
如果您需要基准测试,则需要用Test
替换Benchmark
字,因此方法的名称将为BenchmarkIsUpper
,并且该方法接受输入的结构为{ {1}}。
您可以查看以下链接,以查看在GO中执行测试所需的树形结构:https://github.com/alessiosavi/GoGPUtils。
您可以在其中找到Benchmark和TestCase。
这是一个树形结构的例子
b *testing.B