需要文件的单元测试方法

时间:2018-10-03 12:24:09

标签: unit-testing go

我具有以下功能,需要为其创建单元测试

package main

import (
    "fmt"
    "io/ioutil"
    "os"
)

type Source struct {
    Path string
}

type fileReader interface {
    readOneFile() ([]byte, error)
}

func(s Source) readOneFile() ([]byte, error) {
    cwd, err := os.Getwd()
    file, err := ioutil.ReadFile(fmt.Sprintf("%s/file.txt", cwd))
    if err != nil {
        return nil, fmt.Errorf("erro reading file : %s", err.Error())
    }
    return file, err
}

问题是我在方法中使用路径文件,为这种功能创建单元测试的最佳实践是什么?

2 个答案:

答案 0 :(得分:1)

测试将在包含测试的目录中运行

因此Getwd将提供该目录的路径

测试目录中文件中测试数据的文件名应以下划线_

开头

但是,您的程序需要一个名为“ file.txt”的文件。为了支持测试不以_开头的该文件路径,请在(例如)/ tmp中创建文件file.txt,在运行测试之前立即对/ tmp进行chdir并让测试拾取之前的文件。刚造

答案 1 :(得分:0)

要编写单元测试,您需要使用fileName_test.go在同一包中创建一个文件 假设您的文件名为read.go,因此您的测试文件名称应为read_test.go

read_test.go

      package main

      import (
         "testing"
         "fmt"
      )

    func TestReadOneFile(t *testing.T) {
        var a Source
        f, err := a.readOneFile()
        if err != nil {
           t.Errorf("incorrect")
        } else {
            fmt.Println("passed")
        }
    }

在这里,您必须使用Test作为前缀来命名测试函数名称,并且需要导入软件包testing

创建单元测试后,您可以通过运行以下两个命令来检查代码覆盖率:

1. go test --coverprofile coverage.out
2. go tool cover -html=coverage.out