3 回答

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊
給定包的測(cè)試應(yīng)位于該包中,以便它們可以看到該包的未導(dǎo)出變量、字段和方法,并且根本不需要導(dǎo)入該包。不要將它們放在單獨(dú)的目錄中。test
如有必要,您可以導(dǎo)入其他包來(lái)測(cè)試此包,但無(wú)法看到其他包中未導(dǎo)出的內(nèi)容。在這方面,測(cè)試與任何其他文件沒(méi)有什么不同。

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊
正如其他答案中指出的那樣,測(cè)試文件必須與測(cè)試文件位于同一目錄中??梢圆榭唇坛?a >創(chuàng)建 Go 模塊,然后添加測(cè)試。
以下是這些教程中的示例:
myproject
├── greetings
├── greetings.go (package greetings)
├── greetings_test.go (package greetings)
├── go.mod
└── go.sum
問(wèn)候語(yǔ)文件:
package greetings
import "fmt"
// Hello returns a greeting for the named person.
func Hello(name string) string {
// Return a greeting that embeds the name in a message.
message := fmt.Sprintf("Hi, %v. Welcome!", name)
return message
}
greetings_test.go 文件包含兩個(gè)測(cè)試:
package greetings
import (
"testing"
"regexp"
)
// TestHelloName calls greetings.Hello with a name, checking
// for a valid return value.
func TestHelloName(t *testing.T) {
name := "Gladys"
want := regexp.MustCompile(`\b`+name+`\b`)
msg, err := Hello("Gladys")
if !want.MatchString(msg) || err != nil {
t.Fatalf(`Hello("Gladys") = %q, %v, want match for %#q, nil`, msg, err, want)
}
}
// TestHelloEmpty calls greetings.Hello with an empty string,
// checking for an error.
func TestHelloEmpty(t *testing.T) {
msg, err := Hello("")
if msg != "" || err == nil {
t.Fatalf(`Hello("") = %q, %v, want "", error`, msg, err)
}
}

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超5個(gè)贊
的 已編譯項(xiàng)目是二進(jìn)制文件,該二進(jìn)制文件是包的下游用戶(hù)將與之交互的內(nèi)容。因此,驗(yàn)證 行為的測(cè)試應(yīng)該針對(duì)二進(jìn)制文件本身進(jìn)行測(cè)試,而不是針對(duì)用于實(shí)現(xiàn)該二進(jìn)制文件的單個(gè)函數(shù)進(jìn)行測(cè)試。package main
package main
可以通過(guò)以下方法編寫(xiě)此類(lèi)測(cè)試:使用要運(yùn)行的包(可能使用標(biāo)志將二進(jìn)制文件輸出到測(cè)試的臨時(shí)目錄),然后使用包執(zhí)行生成的二進(jìn)制文件。os/exec
go build cmd
-o
os/exec
或者,使用第三方測(cè)試包(如 github.com/rogpeppe/testscript
)編寫(xiě)更簡(jiǎn)潔的腳本驅(qū)動(dòng)測(cè)試。
或者,將任何幫助程序函數(shù)分解為內(nèi)部
包,并測(cè)試這些包的導(dǎo)出函數(shù)。
使用上述任何一種方法,給定包的測(cè)試仍與該包屬于同一目錄。這樣,當(dāng)用戶(hù)運(yùn)行時(shí),他們可以確信它確實(shí)有效 - 如果測(cè)試位于不同的包中,他們顯然不會(huì)知道為了測(cè)試包而運(yùn)行。go test cmd
cmd
go test test
cmd
- 3 回答
- 0 關(guān)注
- 115 瀏覽
添加回答
舉報(bào)