测试功能以获得100%的覆盖率



如何为以下函数编写测试以获得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: %vn", err)
      continue
    }
    sum += countFileLine(f)
    f.Close()
  }
  return sum
}

极端主义方式

将方法签名更改为将func (string) (os.File, error)作为输入,并在执行测试时注入它。

大致如下:

func countLines(files []string, open func(string) (*os.File, error)) int {
    ...
    f, err := open(e)
    ...
}

然后,您可以进行测试并注入一个函数,该函数将返回测试的安排。

实用的方法

只需在包的test目录下创建文件,然后使用这些文件进行测试。好处是这个方法更简单,测试也更简单。当你有很多依赖关系时,第一种方法可能会变得很麻烦…

最新更新