为了账号安全,请及时绑定邮箱和手机立即绑定

需要文件的单元测试方法

需要文件的单元测试方法

Go
一只萌萌小番薯 2023-04-17 16:08:13
我有以下功能,我需要为它创建一个单元测试package mainimport (    "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 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

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

所以 Getwd 将给出该目录的路径

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

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


查看完整回答
反对 回复 2023-04-17
?
ITMISS

TA贡献1871条经验 获得超8个赞

为了编写单元测试,你需要在同一个包中创建一个文件,假设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.out

2. go tool cover -html=coverage.out


查看完整回答
反对 回复 2023-04-17
  • 2 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信