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

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

TestMain - 沒(méi)有要運(yùn)行的測(cè)試

TestMain - 沒(méi)有要運(yùn)行的測(cè)試

Go
月關(guān)寶盒 2023-06-05 18:17:57
我正在編寫一個(gè)編譯 C 源文件并將輸出寫入另一個(gè)文件的包。我正在為這個(gè)包編寫測(cè)試,我需要?jiǎng)?chuàng)建一個(gè)臨時(shí)目錄來(lái)寫入輸出文件。我正在使用TestMain函數(shù)來(lái)做到這一點(diǎn)。出于某種原因,當(dāng)我剛剛運(yùn)行測(cè)試時(shí),我總是收到“沒(méi)有要運(yùn)行的測(cè)試”的警告TestMain。我嘗試調(diào)試該TestMain函數(shù),我可以看到確實(shí)創(chuàng)建了臨時(shí)目錄。當(dāng)我手動(dòng)創(chuàng)建testoutput目錄時(shí),所有測(cè)試都通過(guò)了。我正在從目錄加載兩個(gè) C 源文件testdata,其中一個(gè)是故意錯(cuò)誤的。gcc.go:package gccimport (    "os/exec")func Compile(inPath, outPath string) error {    cmd := exec.Command("gcc", inPath, "-o", outPath)    return cmd.Run()}gcc_test.go:package gccimport (    "os"    "path/filepath"    "testing")func TestOuputFileCreated(t *testing.T) {    var inFile = filepath.Join("testdata", "correct.c")    var outFile = filepath.Join("testoutput", "correct_out")    if err := Compile(inFile, outFile); err != nil {        t.Errorf("Expected err to be nil, got %s", err.Error())    }    if _, err := os.Stat(outFile); os.IsNotExist(err) {        t.Error("Expected output file to be created")    }}func TestOuputFileNotCreatedForIncorrectSource(t *testing.T) {    var inFile = filepath.Join("testdata", "wrong.c")    var outFile = filepath.Join("testoutput", "wrong_out")    if err := Compile(inFile, outFile); err == nil {        t.Errorf("Expected err to be nil, got %v", err)    }    if _, err := os.Stat(outFile); os.IsExist(err) {        t.Error("Expected output file to not be created")    }}func TestMain(m *testing.M) {    os.Mkdir("testoutput", 666)    code := m.Run()    os.RemoveAll("testoutput")    os.Exit(code)}go test輸出:sriram@sriram-Vostro-15:~/go/src/github.com/sriram-kailasam/relab/pkg/gcc$ go test--- FAIL: TestOuputFileCreated (0.22s)        gcc_test.go:14: Expected err to be nil, got exit status 1FAILFAIL    github.com/sriram-kailasam/relab/pkg/gcc        0.257s運(yùn)行TestMain:Running tool: /usr/bin/go test -timeout 30s github.com/sriram-kailasam/relab/pkg/gcc -run ^(TestMain)$ok      github.com/sriram-kailasam/relab/pkg/gcc    0.001s [no tests to run]Success: Tests passed.
查看完整描述

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)

? ? ? ? ? ? }

? ? ? ? })

? ? }

}


查看完整回答
反對(duì) 回復(fù) 2023-06-05
?
米脂

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)

  }

}


查看完整回答
反對(duì) 回復(fù) 2023-06-05
  • 2 回答
  • 0 關(guān)注
  • 194 瀏覽
慕課專欄
更多

添加回答

舉報(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)