需要文件的单元测试方法

我有以下功能,我需要为它创建一个单元测试


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

}

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


一只萌萌小番薯
浏览 120回答 2
2回答

慕后森

测试将在包含测试的目录中运行所以 Getwd 将给出该目录的路径测试目录下文件中测试数据的文件名应以下划线开头_但是,您的程序需要一个名为“file.txt”的文件。为了支持测试这个不以_在(例如)/tmp 中创建文件 file.txt 开头的文件路径,在运行测试之前立即对 /tmp 执行 chdir 并让测试获取刚刚创建的文件

ITMISS

为了编写单元测试,你需要在同一个包中创建一个文件,假设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")        }    }在这里你必须用Testas 前缀命名你的测试函数名称并且需要导入包testing。创建单元测试后,您可以通过运行以下两个命令来检查代码覆盖率:1. go test --coverprofile coverage.out2. go tool cover -html=coverage.out
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go