为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 单元测试中的存根方法

Golang 单元测试中的存根方法

Go
富国沪深 2021-12-07 14:44:27
我一直在思考这一整夜,但仍然找不到一种优雅的方式来做这件事。假设我有一个结构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)

    ...

}


查看完整回答
反对 回复 2021-12-07
?
潇湘沐

TA贡献1816条经验 获得超6个赞

最终使我的结构 100% 可注入,代码看起来清晰简洁,测试就像一个魅力!


查看完整回答
反对 回复 2021-12-07
  • 2 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信