go - 测试函数以获得 100% 的覆盖率

标签 go

您将如何为以下函数编写测试以获得 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/

相关文章:

Go打包多个文件,如何构造

mongodb - 与Mongo Atlas的连接可使用家庭无线功能,但不能使用电话连接

html - 嵌入数据或不嵌入数据什么是服务/解析动态内容的最佳实践

go - 库伯内斯 403 : Cannot patch pods in the namespace

html - 使用golang将html模板作为文本字段存储在数据库中

go - 检查方法类型是否与函数类型匹配

go - 正确读取用户的输入

go - 无法制作grpc-gateway .gw.pb,并且没有错误

go - 是否可以重用 godog 场景?

html - 使用 Go 解析 HTML