当测试在不同的包中时没有测试覆盖
No test coverage when tests are in a different package
我有位于单独目录中的集成测试。这些通过 net/http/httptest 在同一进程中测试 运行 我的 http 服务器。我的测试 运行 但我没有得到任何报道。
这里是一个非常简单的示例,为简洁起见未使用 http。
目录布局:
$GOPATH/src/go-test
hello
hello.go
itest
integration_test.go
hello.go
package hello
func Hello() string {
return "hello"
}
integration_test.go
package itest
import (
"go-test/hello"
"testing"
)
func TestHello(t *testing.T) {
s := hello.Hello()
if s != "hello" {
t.Errorf("Hello says %s", s)
}
}
运行 测试:
$ go test -v -coverpkg ./... ./itest
=== RUN TestHello
--- PASS: TestHello (0.00s)
PASS
coverage: 0.0% of statements in ./...
ok go-test/itest 0.001s coverage: 0.0% of statements in ./...
另一次尝试:
$ go test -v -coverpkg all ./itest
=== RUN TestHello
--- PASS: TestHello (0.00s)
PASS
coverage: 0.0% of statements in all
ok go-test/itest 0.001s coverage: 0.0% of statements in all
请注意覆盖率为 0%。
根据go help testflag
:
-coverpkg pattern1,pattern2,pattern3
Apply coverage analysis in each test to packages matching the patterns.
The default is for each test to analyze only the package being tested.
See 'go help packages' for a description of package patterns.
Sets -cover.
当我的测试在不同的包中时,如何才能获得真正的覆盖率?
$ go version
go version go1.10 linux/amd64
使用-coverpkg go-test/...,./...
go-test 是 i-test 的兄弟,因此使用 ./... 不起作用,因为它只选择当前目录的包和子包。
go test -v -coverpkg ./... ./...
应该会给你预期的结果
我有位于单独目录中的集成测试。这些通过 net/http/httptest 在同一进程中测试 运行 我的 http 服务器。我的测试 运行 但我没有得到任何报道。
这里是一个非常简单的示例,为简洁起见未使用 http。 目录布局:
$GOPATH/src/go-test
hello
hello.go
itest
integration_test.go
hello.go
package hello
func Hello() string {
return "hello"
}
integration_test.go
package itest
import (
"go-test/hello"
"testing"
)
func TestHello(t *testing.T) {
s := hello.Hello()
if s != "hello" {
t.Errorf("Hello says %s", s)
}
}
运行 测试:
$ go test -v -coverpkg ./... ./itest
=== RUN TestHello
--- PASS: TestHello (0.00s)
PASS
coverage: 0.0% of statements in ./...
ok go-test/itest 0.001s coverage: 0.0% of statements in ./...
另一次尝试:
$ go test -v -coverpkg all ./itest
=== RUN TestHello
--- PASS: TestHello (0.00s)
PASS
coverage: 0.0% of statements in all
ok go-test/itest 0.001s coverage: 0.0% of statements in all
请注意覆盖率为 0%。
根据go help testflag
:
-coverpkg pattern1,pattern2,pattern3
Apply coverage analysis in each test to packages matching the patterns.
The default is for each test to analyze only the package being tested.
See 'go help packages' for a description of package patterns.
Sets -cover.
当我的测试在不同的包中时,如何才能获得真正的覆盖率?
$ go version
go version go1.10 linux/amd64
使用-coverpkg go-test/...,./...
go-test 是 i-test 的兄弟,因此使用 ./... 不起作用,因为它只选择当前目录的包和子包。
go test -v -coverpkg ./... ./...
应该会给你预期的结果