與測試分離的程式碼的測試覆蓋率
儘管單獨組織測試文件有利於更乾淨的程式碼庫並將測試限制為公共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中文網其他相關文章!