我一直在思考這一整夜,但仍然找不到一種優(yōu)雅的方式來做這件事。假設(shè)我有一個結(jié)構(gòu)type file struct { x int}func (f *file) filename() string { return fmt.Sprintf("%s/%d.log", exportPath, f.x)}func (f *file) write(data []byte) { ... aFile = os.File.Open(f.filename()) ...}現(xiàn)在我想測試 write 方法和存根文件名方法以返回臨時文件名。我怎樣才能做到這一點?到目前為止,我發(fā)現(xiàn)了兩個選項:聲明文件名 = func(f* file) 并在測試中覆蓋它使文件名成為結(jié)構(gòu)的一個字段但在這種情況下,他們似乎都錯了。所以問題是 - 我可以以任何方式存根這種方法嗎?一般來說 - 如何存根內(nèi)部方法進(jìn)行測試(對于外部顯然依賴注入可以工作)
2 回答

炎炎設(shè)計
TA貢獻(xiàn)1808條經(jīng)驗 獲得超4個贊
使文件名成為結(jié)構(gòu)體的一個字段是一種優(yōu)雅的方式。本filename應(yīng)被定義,當(dāng)新的結(jié)構(gòu)。
type fileStruct {
filename string
}
func newFileStruct(x int) *fileStruct {
filename := fmt.Sprintf("%s/%d.log", exportPath, x)
return &fileStruct{filename: filename}
}
func (f *fileStruct) write (data []byte) {
...
file = os.File.Open(f.filename)
...
}
- 2 回答
- 0 關(guān)注
- 195 瀏覽
添加回答
舉報
0/150
提交
取消