Golang中的覆蓋率測試

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

Golang中的覆蓋率測試

golang中提供了不少工具鏈,可以使用它們方便的進行單元測試、分析效能瓶頸,提供運行時資訊等,總而言之是非常有用的。

go test這個工具大家用的應該比較多,之前我使用也大多是用來做單元測試的,go中做單元測試非常的方便,然而我忽視了覆蓋率測試。

單元測試覆蓋了多少代碼呢?golang的go test工具其實還支援顯示覆蓋率,最簡單的用法就是執行

go test -c -covermode=count -coverpkg ./...

來編譯一個尾碼為.test的可執行檔,執行後,它會執行所有的單元測試代碼,然後輸出覆蓋率的報告。

這其實是統計單元測試的覆蓋率,也就是白盒測試的覆蓋率。

然而我們這裡的功能測試告訴我,這個還支援黑箱測試的覆蓋率統計,我那時候還楞了一下,想了想不大可能吧。於是測試給我發了下面這個文章,我自己讀了下,真是大腦洞,真想的出來。

文章

按著這份文章,就是在某個單元測試檔案中,定義一個函數,當某個flag被提供的時候,執行main函數來運行主迴圈。

package mainimport (    "flag"    "testing"    "github.com/cihub/seelog")var systemTest *boolvar testConfigPath *stringfunc init() {    systemTest = flag.Bool("systemTest", false, "Set to true when running system tests")    testConfigPath = flag.String("configpath", "", "-configpath <lua config file path>")}func TestEntry(t *testing.T) {    //  system tests?    flag.Parse()    if *systemTest {        seelog.Info("system test running main")        //  set the configpath variable        g_configpath = testConfigPath        main()    }}

當然我的本體程式本身就有一個輸入參數,這裡就做了個小技巧,在init函數裡把參數全解析了,假設解析了原始的參數,則賦值給main中的參數變數,main會判斷這個變數是否被初始化了,假設沒有的話,會再次的進行flag的讀取。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.