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

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

在 Go 中分離單元測(cè)試和集成測(cè)試

在 Go 中分離單元測(cè)試和集成測(cè)試

Go
慕工程0101907 2021-08-16 19:32:31
在 GoLang (testify) 中分離單元測(cè)試和集成測(cè)試是否有既定的最佳實(shí)踐?我混合了單元測(cè)試(不依賴任何外部資源,因此運(yùn)行速度非常快)和集成測(cè)試(依賴任何外部資源,因此運(yùn)行速度較慢)。所以,當(dāng)我說(shuō)go test.最直接的技術(shù)似乎是在 main 中定義一個(gè) -integrate 標(biāo)志:var runIntegrationTests = flag.Bool("integration", false    , "Run the integration tests (in addition to the unit tests)")然后在每個(gè)集成測(cè)試的頂部添加一個(gè) if 語(yǔ)句:if !*runIntegrationTests {    this.T().Skip("To run this test, use: go test -integration")}這是我能做的最好的嗎?我搜索了 testify 文檔,看看是否有命名約定或某些東西可以為我完成這個(gè)任務(wù),但沒(méi)有找到任何東西。我錯(cuò)過(guò)了什么嗎?
查看完整描述

3 回答

?
素胚勾勒不出你

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

提出了幾種很好的模式來(lái)分離測(cè)試。


SoundCloud 的這套 Go 實(shí)踐建議使用構(gòu)建標(biāo)記(在構(gòu)建包的“構(gòu)建約束”部分中描述)來(lái)選擇要運(yùn)行的測(cè)試:


編寫(xiě)一個(gè)integration_test.go,并給它一個(gè)集成的構(gòu)建標(biāo)簽。為諸如服務(wù)地址和連接字符串之類的內(nèi)容定義(全局)標(biāo)志,并在您的測(cè)試中使用它們。


// +build integration


var fooAddr = flag.String(...)


func TestToo(t *testing.T) {

    f, err := foo.Connect(*fooAddr)

    // ...

}

go test 像 go build 一樣使用 build 標(biāo)簽,所以你可以調(diào)用go test -tags=integration. 它還合成了一個(gè)調(diào)用 flag.Parse 的包 main,因此任何聲明和可見(jiàn)的標(biāo)志都將被處理并可供您的測(cè)試使用。


作為類似的選項(xiàng),您還可以使用構(gòu)建條件默認(rèn)運(yùn)行集成測(cè)試// +build !unit,然后通過(guò)運(yùn)行g(shù)o test -tags=unit.


@adamc 評(píng)論:


對(duì)于嘗試使用構(gòu)建標(biāo)記的任何其他人,重要的是// +build test注釋是文件中的第一行,并且在注釋后包含一個(gè)空行,否則該-tags命令將忽略該指令。


此外,構(gòu)建注釋中使用的標(biāo)記不能有破折號(hào),但允許使用下劃線。例如,// +build unit-tests不會(huì)工作,而// +build unit_tests會(huì)。


查看完整回答
反對(duì) 回復(fù) 2021-08-16
?
一只甜甜圈

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

我看到了三種可能的解決方案。第一種是使用短模式進(jìn)行單元測(cè)試。因此,您將使用go test -short單元測(cè)試和相同的但沒(méi)有-short標(biāo)志來(lái)運(yùn)行您的集成測(cè)試。標(biāo)準(zhǔn)庫(kù)使用短模式跳過(guò)長(zhǎng)時(shí)間運(yùn)行的測(cè)試,或者通過(guò)提供更簡(jiǎn)單的數(shù)據(jù)使它們運(yùn)行得更快。

第二是使用公約,并打電話給你測(cè)試,無(wú)論是TestUnitFooTestIntegrationFoo再使用-run測(cè)試標(biāo)志來(lái)表示要運(yùn)行的測(cè)試。因此,您將go test -run 'Unit'用于單元測(cè)試和go test -run 'Integration'集成測(cè)試。

第三個(gè)選項(xiàng)是使用環(huán)境變量,并在您的測(cè)試設(shè)置中使用os.Getenv. 然后您將使用 simplego test進(jìn)行單元測(cè)試和FOO_TEST_INTEGRATION=true go test集成測(cè)試。

我個(gè)人更喜歡這個(gè)-short解決方案,因?yàn)樗?jiǎn)單并且在標(biāo)準(zhǔn)庫(kù)中使用,所以它似乎是分離/簡(jiǎn)化長(zhǎng)時(shí)間運(yùn)行測(cè)試的事實(shí)上的方法。但是-runos.Getenv解決方案提供了更大的靈活性(也需要更加謹(jǐn)慎,因?yàn)檎齽t表達(dá)式涉及-run)。


查看完整回答
反對(duì) 回復(fù) 2021-08-16
  • 3 回答
  • 0 關(guān)注
  • 272 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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