我一直在想这整晚,但仍然找不到一种优雅的方式来做这件事。让我们说我有一个结构
type fileStruct {
x int
}
func (f *fileStruct) filename() string {
return fmt.Sprintf("%s/%d.log", exportPath, f.x)
}
func (f *fileStruct) write(data []byte) {
...
file = os.File.Open(f.filename())
...
}
现在我想测试write方法和stub filename方法来返回临时文件名。我怎样才能做到这一点?到目前为止,我找到了两个选择:
但在这种情况下他们似乎都错了。所以问题是 - 我可以以任何方式存根这种方法吗?一般而言 - 如何对内部测试方法进行存根(对于外部明显的依赖注入可能有效)
答案 0 :(得分:1)
使文件名成为结构的字段是一种优雅的方式。
新结构时应定义filename
。
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)
...
}
答案 1 :(得分:0)
结束使我的结构100%注射,代码看起来清晰简洁,测试就像一个魅力!