您将如何为以下函数编写测试以获得 100% 的覆盖率?
func countLines(files []string) int {
sum := 0
for _, e := range files {
f, err := os.Open(e)
if err != nil {
fmt.Fprintf(os.Stderr, "err: %v\n", err)
continue
}
sum += countFileLine(f)
f.Close()
}
return sum
}
最佳答案
极端主义方式
更改方法签名以将 func (string) (os.File, error)
作为输入并在进行测试时注入(inject)它。
沿着这些线的东西:
func countLines(files []string, open func(string) (*os.File, error)) int {
...
f, err := open(e)
...
}
然后,您可以进行测试并注入(inject)一个函数,该函数将返回为您安排的测试。
实用方法
只需在包的 test
目录下创建文件,然后使用这些文件进行测试。
好处是方法更简单,测试也更简单。当您有很多依赖项时,第一种方法可能会变得很麻烦……
关于go - 测试函数以获得 100% 的覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34435542/