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

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

如何使用 os.O_RDWR 和 os.O_CREATE 標(biāo)志測(cè)試 file.Open?

如何使用 os.O_RDWR 和 os.O_CREATE 標(biāo)志測(cè)試 file.Open?

Go
慕絲7291255 2023-07-17 14:04:06
我正在嘗試為結(jié)構(gòu)構(gòu)造函數(shù)編寫單元測(cè)試,如果在 file.Open 期間發(fā)生錯(cuò)誤,它也可能返回 nil。我不知道如何使用標(biāo)志測(cè)試/模擬文件錯(cuò)誤: os.O_RDWR|os.O_CREATE|os.O_APPEND我嘗試檢查測(cè)試中的 nil 值,但失敗了。構(gòu)造函數(shù):type App struct {    someField string    log *log.Logger}func New() *App {    app := &App{}    f, err := os.OpenFile("info.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)    if err != nil {        fmt.Printf("error opening file: %v", err)        return nil    }    mw := io.MultiWriter(os.Stdout, f)    l = log.New(mw, "APP", log.Ldate|log.LstdFlags|log.Lshortfile)    app.log = l    return app}并測(cè)試構(gòu)造函數(shù):func TestNew(t *testing.T) {    var a App    a = New()    // doesn't cover    if a == nil {        t.Fatal("Error opening file")    }}我希望覆蓋錯(cuò)誤!= nil,它在覆蓋范圍內(nèi)是紅色的:f, err := os.OpenFile("info.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)if err != nil {  fmt.Printf("error opening file: %v", err)  return nil}
查看完整描述

3 回答

?
繁華開滿天機(jī)

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

Go 中的模擬意味著擁有接口,如果這是你真正需要的東西,你可能會(huì)考慮使用https://github.com/spf13/afero之類的東西,而不是直接使用 os 包。這還允許您使用內(nèi)存文件系統(tǒng)和其他使測(cè)試更容易的東西。



查看完整回答
反對(duì) 回復(fù) 2023-07-17
?
FFIVE

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

您可以使文件名/文件路徑可配置,而不是使用硬編碼的 info.log,然后在您的測(cè)試中您可以使用一些不存在的路徑。

有多種配置選項(xiàng):

  • 構(gòu)造函數(shù)中的參數(shù)(如果您想保持 API 不變,也許可以從 New 調(diào)用一個(gè)單獨(dú)的構(gòu)造函數(shù))

  • 包級(jí)別配置(如全局變量 defaultLogFileName),這不太靈活(例如,如果您想并行運(yùn)行測(cè)試),但也可能適合這種情況


查看完整回答
反對(duì) 回復(fù) 2023-07-17
?
慕姐8265434

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

有兩件事需要考慮。

第一個(gè)是O_RDWR|O_CREAT|O_APPEND在打開文件時(shí)幾乎沒(méi)有什么有趣的:它告訴操作系統(tǒng)應(yīng)該以附加模式打開文件以進(jìn)行讀寫,并且如果文件在調(diào)用時(shí)不存在,則應(yīng)該被創(chuàng)建,否則可以追加到它上面。

現(xiàn)在我認(rèn)為此操作可能失敗的唯一兩個(gè)原因是:

  • 包含該文件的文件系統(tǒng)被掛載為只讀 - 因此打開文件進(jìn)行寫入、創(chuàng)建文件并附加到文件是不可能的。

  • 該文件不存在,并且文件系統(tǒng)的索引節(jié)點(diǎn)表已滿,因此即使有空間用于該文件的數(shù)據(jù),也無(wú)法為另一個(gè)文件創(chuàng)建記錄。

現(xiàn)在考慮一下,為了模擬其中一種情況,您需要操作運(yùn)行測(cè)試的進(jìn)程可用的一些文件系統(tǒng)。雖然它當(dāng)然可以在單元測(cè)試框架內(nèi)完成,但它看起來(lái)更屬于集成測(cè)試領(lǐng)域。

在 Linux 上進(jìn)行這一級(jí)別的測(cè)試有很多選擇:“flakey”設(shè)備映射器目標(biāo)和朋友,通過(guò)循環(huán)設(shè)備或 FUSE 安裝只讀映像,將故障注入正在運(yùn)行的內(nèi)核等。不過(guò),這些大多是不適合單元測(cè)試。

如果你想對(duì)這些東西進(jìn)行單元測(cè)試,有兩種方法:

  • 使用https://github.com/spf13/afero之類的東西抽象出整個(gè)文件系統(tǒng)層。

    好處是您可以輕松測(cè)試代碼中幾乎所有與文件系統(tǒng)相關(guān)的內(nèi)容。

  • 使用變量抽象出一點(diǎn)代碼。

    說(shuō)吧,你可能有

    var?whateverCreate?=?os.Create

    在您的代碼中使用它whateverCreate,然后在測(cè)試套件的設(shè)置代碼中覆蓋該變量,為其分配一個(gè)函數(shù),該函數(shù)返回您在特定測(cè)試中需要的任何錯(cuò)誤。


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

添加回答

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