我一直在思考这一整夜,但仍然找不到一种优雅的方式来做这件事。假设我有一个结构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()) ...}现在我想测试 write 方法和存根文件名方法以返回临时文件名。我怎样才能做到这一点?到目前为止,我发现了两个选项:声明文件名 = func(f* file) 并在测试中覆盖它使文件名成为结构的一个字段但在这种情况下,他们似乎都错了。所以问题是 - 我可以以任何方式存根这种方法吗?一般来说 - 如何存根内部方法进行测试(对于外部显然依赖注入可以工作)
2 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
使文件名成为结构体的一个字段是一种优雅的方式。本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)
...
}
- 2 回答
- 0 关注
- 146 浏览
添加回答
举报
0/150
提交
取消