gpt4 book ai didi

unit-testing - Golang 单元测试中的 stub 方法

转载 作者:IT王子 更新时间:2023-10-29 02:15:07 24 4
gpt4 key购买 nike

我整晚都在想这个问题,但仍然找不到一种优雅的方式来做这件事。假设我有一个结构

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 方法和 stub 文件名方法以返回临时文件名。我怎样才能做到这一点?目前我找到了两个选择:

  1. 声明 filename = func(f* file) 并在测试中覆盖它
  2. 使文件名成为结构的一个字段

但在这种情况下,他们似乎都错了。所以问题是——我能以任何方式 stub 这个方法吗?总的来说——如何 stub 用于测试的内部方法(对于外部显然依赖注入(inject)可以工作)

最佳答案

使文件名成为结构的一个字段是一种优雅的方式。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)
...
}

关于unit-testing - Golang 单元测试中的 stub 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34892455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com