2 回答

TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超8個(gè)贊
#1
嘗試運(yùn)行TestMain()
就像嘗試運(yùn)行main()
。你不這樣做,操作系統(tǒng)為你做這件事。
TestMain是在 Go 1.4 中引入的,用于幫助設(shè)置/拆卸測(cè)試環(huán)境,它被調(diào)用而不是運(yùn)行測(cè)試;引用發(fā)行說(shuō)明:
如果測(cè)試代碼包含函數(shù)
func?TestMain(m?*testing.M)該函數(shù)將被調(diào)用而不是直接運(yùn)行測(cè)試。M 結(jié)構(gòu)包含訪問(wèn)和運(yùn)行測(cè)試的方法。
#2
用于ioutil.TempDir()
創(chuàng)建臨時(shí)目錄。
tmpDir, err := ioutil.TempDir("", "test_output")
if err != nil {
? ? // handle err
}
它將負(fù)責(zé)創(chuàng)建目錄。您稍后應(yīng)該使用os.Remove(tmpDir)刪除臨時(shí)目錄。
您可以將它與Tim Peoples的建議稍微修改后的版本一起使用,例如:
func TestCompile(t *testing.T) {
? ? tmpDir, err := ioutil.TempDir("", "testdata")
? ? if err != nil {
? ? ? ? t.Error(err)
? ? }
? ? defer os.Remove(tmpDir)
? ? tests := []struct {
? ? ? ? name, inFile, outFile string
? ? ? ? err? ? ? ? ? ? ? ? ? ?error
? ? }{
? ? ? ? {"OutputFileCreated", "correct.c", "correct_out", nil},
? ? ? ? {"OutputFileNotCreatedForIncorrectSource", "wrong.c", "wrong_out", someErr},
? ? }
? ? for _, test := range tests {
? ? ? ? var (
? ? ? ? ? ? in? = filepath.Join("testdata", test.inFile)
? ? ? ? ? ? out = filepath.Join(tmpDir, test.outFile)
? ? ? ? )
? ? ? ? t.Run(test.name, func(t *testing.T) {
? ? ? ? ? ? err = Compile(in, out)
? ? ? ? ? ? if err != test.err {
? ? ? ? ? ? ? ? t.Errorf("Compile(%q, %q) == %v; Wanted %v", in, out, err, test.err)
? ? ? ? ? ? }
? ? ? ? })
? ? }
}

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊
很可能,您的問(wèn)題與您傳遞給的模式os.Mkdir(...)值有關(guān)。您提供的是666十進(jìn)制,它是01232八進(jìn)制的(或者,如果您愿意,權(quán)限字符串為d-w--wx-wT),我認(rèn)為這并不是您真正想要的。
而不是666,您應(yīng)該指定0666-- 前導(dǎo) 0 表示您的值是八進(jìn)制表示法。
另外,您的兩個(gè)測(cè)試實(shí)際上是相同的;與其使用 aTestMain(...)來(lái)執(zhí)行設(shè)置,我建議使用*T.Run(...)從單個(gè)頂級(jí)Test*函數(shù)執(zhí)行測(cè)試。是這樣的:
gcc_test.go:
package gcc
import (
"testing"
"path/filepath"
"os"
)
const testoutput = "testoutput"
type testcase struct {
inFile string
outFile string
err error
}
func (tc *testcase) test(t *testing.T) {
var (
in = filepath.Join("testdata", tc.inFile)
out = filepath.Join(testoutput, tc.outFile)
)
if err := Compile(in, out); err != tc.err {
t.Errorf("Compile(%q, %q) == %v; Wanted %v", in, out, err, tc.err)
}
}
func TestCompile(t *testing.T) {
os.Mkdir(testoutput, 0666)
tests := map[string]*testcase{
"correct": &testcase{"correct.c", "correct_out", nil},
"wrong": &testcase{"wrong.c", "wrong_out", expectedError},
}
for name, tc := range tests {
t.Run(name, tc.test)
}
}
- 2 回答
- 0 關(guān)注
- 194 瀏覽
添加回答
舉報(bào)