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

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

打開(kāi)和讀取文件的單元測(cè)試功能

打開(kāi)和讀取文件的單元測(cè)試功能

Go
大話(huà)西游666 2023-06-19 17:48:31
我正在學(xué)習(xí)如何使用一個(gè)簡(jiǎn)單的程序進(jìn)行一些文件讀取,并正在為我的程序添加單元測(cè)試。這樣做時(shí)我遇到了一個(gè)問(wèn)題/問(wèn)題。我想對(duì)下面的函數(shù)進(jìn)行單元測(cè)試,我的問(wèn)題是該函數(shù)采用文件的名稱(chēng),然后打開(kāi)并處理該文件。在測(cè)試期間,我不想實(shí)際將真實(shí)文件傳遞給它。我想知道這是我可以以某種方式模擬的東西,以便我可以將它傳遞給一個(gè)“假”文件并讓它處理它嗎?謝謝!func openAndReadFile(fileName string) [][]string {    file, err := os.Open(fileName)    if err != nil {        fmt.Printf("Failed to read file: %s", fileName)    }    r := csv.NewReader(file)    lines, err := r.ReadAll()    if err != nil {        log.Fatal(err)    }    return lines}
查看完整描述

3 回答

?
臨摹微笑

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

您需要重構(gòu)您的代碼并使其更適合測(cè)試。


這是我會(huì)怎么做:


func openAndReadFile(fileName string) [][]string {

    file, err := os.Open(fileName)

    if err != nil {

        fmt.Printf("Failed to open file: %s", fileName)

    }

    lines, err := readFile(file)

    if err != nil {

        fmt.Printf("Failed to read file: %s", fileName)

    }

    return lines

}


func readFile(reader io.Reader) ([][]string, error) {

    r := csv.NewReader(reader)

    lines, err := r.ReadAll()

    if err != nil {

        log.Fatal(err)

    }

    return lines, err

}

然后為了測(cè)試,您可以簡(jiǎn)單地使用實(shí)現(xiàn)該io.reader接口的任何數(shù)據(jù)結(jié)構(gòu)。例如,我使用字節(jié)緩沖區(qū),但您可以選擇網(wǎng)絡(luò)連接:


func TestReadFile(t *testing.T) {

    var buffer bytes.Buffer

    buffer.WriteString("fake, csv, data")

    content, err := readFile(&buffer)

    if err != nil {

        t.Error("Failed to read csv data")

    }

    fmt.Print(content)

}


查看完整回答
反對(duì) 回復(fù) 2023-06-19
?
縹緲止盈

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

您顯示的功能主要由交互決定:與文件系統(tǒng)的交互以及與 csv 閱讀器的交互。為確保這些交互工作良好,您以后無(wú)論如何都必須針對(duì)文件系統(tǒng)和 csv 閱讀器進(jìn)行一些集成測(cè)試。想想你希望找到哪些錯(cuò)誤,你會(huì)發(fā)現(xiàn)錯(cuò)誤更可能出現(xiàn)在交互層面:文件的順序是正確的,還是應(yīng)該相反?nil 真的是表示沒(méi)有錯(cuò)誤的值嗎?您是否必須為 Open 提供更多論據(jù)?ETC。

因此,我不會(huì)專(zhuān)注于對(duì)該功能進(jìn)行單元測(cè)試。然而,這個(gè)函數(shù)是一個(gè)很好的候選者,可以模擬它使周?chē)a的單元測(cè)試更容易。因此,模擬openAndReadFile對(duì)周?chē)a進(jìn)行單元測(cè)試,并openAndReadFile使用集成測(cè)試進(jìn)行測(cè)試。


查看完整回答
反對(duì) 回復(fù) 2023-06-19
?
慕標(biāo)5832272

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

我強(qiáng)烈建議使用接口而不是文件名字符串,就像這里推薦的其他答案一樣,但如果你真的必須這樣做,唯一的方法可能是使用臨時(shí)文件。使用字符串文件名的決定已將代碼鎖定為假設(shè)文件系統(tǒng)上存在某些內(nèi)容,并推入了文件管理的責(zé)任。



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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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