我具有以下功能,需要为其创建单元测试
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
}
问题是我在方法中使用路径文件,为这种功能创建单元测试的最佳实践是什么?
答案 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