unit-testing - 仅使用 golang 中的标准库断言特定错误

标签 unit-testing testing go

假设我有一个函数,它为位于特定路径 的文件返回base64 编码字符串。

func getFile(path string) (string, error) {
    imgFile, err := ioutil.ReadFile(path)
    if err != nil {
        return "", fmt.Errorf("Error opening image file: %s", err)
    }

    base64 := base64.StdEncoding.EncodeToString(imgFile)
    return base64, nil
}

现在,我正在为此函数编写表驱动测试,它们现在看起来像这样。

func TestGetFile(t *testing.T) {
    type getFileTest struct {
        Path   string
        Base64 string
        Err    error
    }

    getFileTests := []getFileTest{
        {"", "", nil},
    }
    for _, td := range getFileTests {
        base64, err := getFile(td.Path)
        if err != nil {
            t.Errorf("TestGetFile: Error calling getFile: %s", err)
        }
        if base64 != td.Base64 {
            t.Errorf("TestGetFile: Return values from getFile is not expected: Expected: %s, Returned: %s", td.Base64, base64)
        }
    }

}

现在,当前测试失败:-

test.go:18: TestGetFile: Error calling getFile: Error opening image file: open : no such file or directory

当我将空路径传递给 getFile 时,如何断言我得到了正确的错误?

最佳答案

os 包提供了 os.IsNotExist检查各种文件存在错误的函数:

if err != nil && os.IsNotExist(err) {
    fmt.Println("file doesn't exist")
}

关于unit-testing - 仅使用 golang 中的标准库断言特定错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37659195/

相关文章:

c# - 在单元测试中模拟 HttpPostedFile

javascript - Jest 未能监视对象

java - Java JUnit 代码中 new 运算符之后的代码块

c# - 测试策略建议——需要记录运行方法的验证结果并将其用于测试目的

golang regexp FindStringSubmatch() 不返回正确的最后一组

go - 在 Go 中使用 fmt.Printf 打印多个内容

javascript - mocha done() 和 async await 的矛盾问题

html - 用作按钮的 div 标签,以及删除、报告垃圾邮件等动态按钮

tensorflow - 加载的 MobileNet 模型给出了错误的预测

javascript - 模拟删除文件事件