我在Go中看到了几种不同的测试包命名策略,并想知道每种方法的优缺点以及我应该使用哪种方法.
策略1:
文件名:github.com/user/myfunc.go
package myfunc
Run Code Online (Sandbox Code Playgroud)
测试文件名:github.com/user/myfunc_test.go
package myfunc
Run Code Online (Sandbox Code Playgroud)
有关示例,请参阅bzip2.
策略2:
文件名:github.com/user/myfunc.go
package myfunc
Run Code Online (Sandbox Code Playgroud)
测试文件名:github.com/user/myfunc_test.go
package myfunc_test
import (
"github.com/user/myfunc"
)
Run Code Online (Sandbox Code Playgroud)
有关示例,请参见电线.
策略3:
文件名:github.com/user/myfunc.go
package myfunc
Run Code Online (Sandbox Code Playgroud)
测试文件名:github.com/user/myfunc_test.go
package myfunc_test
import (
. "myfunc"
)
Run Code Online (Sandbox Code Playgroud)
请参阅字符串以获取示例.
Go标准库似乎使用了策略1和2的混合.我应该使用哪三个?这是一个痛苦附加package *_test到我的测试包,因为它意味着我无法测试我的包私有方法,但也许有一个我不知道的隐藏的优势?
我有一个这样的项目:
app/
api/
foo.go
test_foo.go
src/
db/
bar.go
Run Code Online (Sandbox Code Playgroud)
在 中foo.go,对 中的函数进行调用bar.go。但是,在运行覆盖率报告时,它显示 bar.go 的 0 行被覆盖。
有没有办法让覆盖范围包括对其他包的函数调用?
就我而言,我并不想为单独的测试db和api,因为通过所有的呼叫db将总是通过api,这将是多余写两个测试。
我正在运行这样的覆盖范围:
go clean -testcache
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out
Run Code Online (Sandbox Code Playgroud)