目錄
問題內容
解決方法
首頁 後端開發 Golang 去測試覆蓋率,如果語句未覆蓋

去測試覆蓋率,如果語句未覆蓋

Feb 11, 2024 am 10:36 AM

去測試覆蓋率,如果語句未覆蓋

php小編百草今天為大家介紹一個測試覆蓋率的方法。在軟體開發過程中,測試覆蓋率是一項重要的指標,它可以幫助我們評估測試案例對於程式碼的覆蓋率。而如果發現有語句未被覆蓋到,我們可以透過一些手段來解決這個問題。在本文中,我們將探討如何測試覆蓋率以及如何處理未涵蓋的語句。

問題內容

我有一個名為 setupConfig() 的 go 函數,並且我有一個 Test_setupconfig 來測試它並測試它很好。但是當我對其進行覆蓋測試並查看 HTML 報告時,它顯示我對 Viper 包返回的一些錯誤的處理沒有被覆蓋。為什麼沒有涵蓋這一點?我該如何處理?

解決方法

覆蓋率報告告訴您在測試期間執行了多少程式碼。您看到的是這些 if 區塊中的 return 語句未經過測試,這表示您沒有任何旨在失敗並傳回錯誤的單元測試。在測試您的程式碼在給定正確輸入時是否有效的同時,確保在給定錯誤輸入時測試正確且安全地失敗也很重要。

但是,這是一個奇怪的情況,因為這些錯誤不在您自己的套件中,這些錯誤來自 viper 套件。此時,重要的是要問自己一個問題「我真正測試的是什麼?」。如果您使用 viper 包,那麼假設該包經過了徹底的測試,並且通過為 viper 錯誤創建您自己的測試,您只是在這些測試上加倍,而沒有真正的改進。出於這個原因,有時我們選擇省略測試這些分支,因為實際上,如果viper 包錯誤- 並假設您的所有輸入都是靜態的並且像所示的那樣進行硬編碼- 那麼這不是您的代碼的問題,而是viper 函式庫的問題。

如果您真的想要獲得 100% 的覆蓋率並測試所有決策樹,唯一的方法是將 viper 套件放在某種抽象後面。最有可能的是傳遞到函數中的接口,允許多種實現,無論您是在生產中運行還是在測試中運行。

話雖如此,不建議像這樣對函數中的所有值進行硬編碼。理想情況下,您希望配置結構的值來自本機設定檔、環境變數、命令列標誌或它們的組合。透過這樣做,您可以讓此設定函數接受用於檢索配置的接口,從而使該函數易於測試,因為您需要做的就是在測試中模擬該接口的實現。所以它會像下面這樣:

config.go

type ConfigController interface {
    GetInput() Config
}

func setupConfig(controller ConfigController) error {
    config := controller.GetInput()
    // your code here
}
登入後複製

config_test.go

type mockConfigController struct {}

func (m *mockConfigController) GetConfig() Config {
    return Config{
        // your config here
    }
}

func Test_setupConfig(t *testing.T) {
    configController := &mockConfigController{}
    err := setupConfig(configController)
    // rest of test here
}
登入後複製

透過這樣做並為您的setupConfig() 函數提供接受接口,這意味著您可以在生產中運行時為其提供函數實現,而且在運行測試時也可以使用硬編碼的測試數據來模擬它。在與其他服務(例如資料庫)互動時,也經常使用它。您可以讓程式碼接受一個接口,告訴它如何與資料庫互動並在測試中模擬它,而不必在運行測試時啟動資料庫並連接到它。這使您可以隔離部分程式碼並僅測試您想要的內容。

以上是去測試覆蓋率,如果語句未覆蓋的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
<🎜>掩蓋:探險33-如何獲得完美的色度催化劑
2 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1677
14
CakePHP 教程
1430
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
Golang vs. Python:性能和可伸縮性 Golang vs. Python:性能和可伸縮性 Apr 19, 2025 am 12:18 AM

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

Golang和C:並發與原始速度 Golang和C:並發與原始速度 Apr 21, 2025 am 12:16 AM

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

開始GO:初學者指南 開始GO:初學者指南 Apr 26, 2025 am 12:21 AM

goisidealforbeginnersandsubableforforcloudnetworkservicesduetoitssimplicity,效率和concurrencyFeatures.1)installgromtheofficialwebsitealwebsiteandverifywith'.2)

Golang vs.C:性能和速度比較 Golang vs.C:性能和速度比較 Apr 21, 2025 am 12:13 AM

Golang適合快速開發和並發場景,C 適用於需要極致性能和低級控制的場景。 1)Golang通過垃圾回收和並發機制提升性能,適合高並發Web服務開發。 2)C 通過手動內存管理和編譯器優化達到極致性能,適用於嵌入式系統開發。

Golang vs. Python:主要差異和相似之處 Golang vs. Python:主要差異和相似之處 Apr 17, 2025 am 12:15 AM

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。Golang以其并发模型和高效性能著称,Python则以简洁语法和丰富库生态系统著称。

Golang和C:性能的權衡 Golang和C:性能的權衡 Apr 17, 2025 am 12:18 AM

Golang和C 在性能上的差異主要體現在內存管理、編譯優化和運行時效率等方面。 1)Golang的垃圾回收機制方便但可能影響性能,2)C 的手動內存管理和編譯器優化在遞歸計算中表現更為高效。

表演競賽:Golang vs.C 表演競賽:Golang vs.C Apr 16, 2025 am 12:07 AM

Golang和C 在性能競賽中的表現各有優勢:1)Golang適合高並發和快速開發,2)C 提供更高性能和細粒度控制。選擇應基於項目需求和團隊技術棧。

Golang vs. Python:利弊 Golang vs. Python:利弊 Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

See all articles