与测试分离的代码的测试覆盖率
尽管单独组织测试文件有利于更干净的代码库并将测试限制为公共 API 交互,它对获得被测目标包(在本例中为 api_client)的覆盖率提出了挑战。
为了解决这个问题,我们可以在运行测试时利用 -coverpkg 标志和包名称:
go test -cover -coverpkg "api_client" "api_client_tests"
此命令将运行为 api_client 包启用覆盖的测试。
虽然允许将测试文件与代码文件分开,但需要注意的是,它偏离了 Go 的标准方法。这意味着包外部的测试无法访问包私有变量或函数,即使它们位于单独的目录中。
要强制进行黑盒测试,其中测试应仅访问公共 API 方法,您仍然可以将测试保存在单独的包中,而无需物理移动文件。例如:
<code class="go">// api_client.go package api_client // Private variable not accessible outside package var privateVar = 10 func PublicMethod() {}</code>
<code class="go">// api_client_test.go package api_client_tests import ( "testing" "api_client" // Import api_client package ) func TestPublicMethod(t *testing.T) { api_client.PublicMethod() }</code>
在此示例中,测试文件无法访问 api_client.go 中的 privateVar 和 Method 函数,确保测试仅通过公共 API 进行交互。
以上是Go中如何实现与测试分离的代码的测试覆盖率?的详细内容。更多信息请关注PHP中文网其他相关文章!