第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

去單元測(cè)試致命和測(cè)試 main()

去單元測(cè)試致命和測(cè)試 main()

Go
慕桂英3389331 2022-01-17 18:45:17
我很新去測(cè)試來自 PHP 的背景和 PHPUnit 測(cè)試。在 PHP 中,非??煽康匦麚P(yáng)您需要 100% 的覆蓋率。在 Go 中,我讀過的大多數(shù)關(guān)于測(cè)試的東西似乎很少,沒有像引發(fā)錯(cuò)誤這樣的東西。例如我的小程序:func main() {    config = readConfig("config.json")}func readConfig(path string) Config {    var cfg Config    file, err := ioutil.ReadFile(path)    if err != nil {        log.Fatal(err)    }    err = json.Unmarshal(file, &cfg)    if err != nil {        log.Fatal(err)    }    return cfg}func TestCanReadConfig(t *testing.T) {    cfg := readConfig("test_data/config.json")    if cfg.Broker_pass != "test" || cfg.Broker_port != "3333" {        t.Error("invalid config")    }}現(xiàn)在在我的示例中,我會(huì)遇到覆蓋問題,因?yàn)閱卧獪y(cè)試中根本沒有涵蓋 main()(應(yīng)該如何處理?)并且 2 log.Fatal() 根本不包括在內(nèi)。我的問題是如何在 go 中準(zhǔn)確地編寫測(cè)試?我是否以一種不太嚴(yán)格的方式來做,而不是測(cè)試每一個(gè)可能的場(chǎng)景,或者我可以像在 php 中那樣使用 @expectedException \InvalidArgumentException Can I 還是應(yīng)該測(cè)試 main 函數(shù)進(jìn)行注釋?如果不是,我可以以某種方式從覆蓋工具中忽略它嗎?我應(yīng)該考慮一個(gè)測(cè)試框架嗎?大多數(shù)測(cè)試教程都很好,但很短,只介紹簡(jiǎn)單的測(cè)試。
查看完整描述

1 回答

?
隔江千里

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊

它本身不是 Go 的東西,這取決于您的偏好,但是:


一個(gè)。不要測(cè)試main。main 應(yīng)該只調(diào)用經(jīng)過測(cè)試的代碼,最好是在其他包中。為這些包提供盡可能多的代碼覆蓋率,并盡可能讓 main 變得微不足道。無論覆蓋范圍如何,這是一個(gè)很好的做法。所以這不是一個(gè)真正的問題。


灣。不要log.Fatal用于可測(cè)試的代碼,只返回錯(cuò)誤。您可以保留log.Fatal應(yīng)用程序初始化代碼,即 - in main:)。因此,如果 main 調(diào)用readConfig失敗,它只會(huì)返回一個(gè)錯(cuò)誤(非??蓽y(cè)試?。?。添加的應(yīng)用程序行為log.Fatal是 main 的工作——配置讀取器不應(yīng)該處理諸如決定我們是否應(yīng)該退出應(yīng)用程序之類的事情,對(duì)吧?它只是讀取配置并告訴您它是否成功。應(yīng)用程序決定如何處理它。


所以你的代碼可能看起來像:


func readConfig(path string) (Config, error) {

    var cfg Config

    file, err := ioutil.ReadFile(path)

    if err != nil {

        return cfg, err

    }

    err = json.Unmarshal(file, &cfg)

    if err != nil {

        return cfg, err

    }

    return cfg, nil

}


func main() {

    config, err := readConfig("config.json")

    if err != nil {

        log.Fatal(err)

    }


}

現(xiàn)在您已經(jīng)將邏輯與應(yīng)用程序行為分離,并且readConfig完全可測(cè)試。


查看完整回答
反對(duì) 回復(fù) 2022-01-17
  • 1 回答
  • 0 關(guān)注
  • 187 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)