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ì)。

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ú)論是TestUnitFoo
或TestIntegrationFoo
再使用-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í)上的方法。但是-run
和os.Getenv
解決方案提供了更大的靈活性(也需要更加謹(jǐn)慎,因?yàn)檎齽t表達(dá)式涉及-run
)。
- 3 回答
- 0 關(guān)注
- 272 瀏覽
添加回答
舉報(bào)