单元测试标准

一、基本准则

1、自动化的

单元测试应该能够自动地运行,从准备数据到执行测试到检查结果这一整个过程都不需要人工干预。

首先,调用测试的过程必须是自动化的,不需要任何人工干预,例如人工输入参数值或回答YES/NO。对于测试所需要的任何预设条件(例如创建一个临时文本文件并输入指定内容)等等,都应该成为单元测试自身的一个自动化组成部分。配合自动化构建工具,能够做到一键执行整个项目的全部单元测试并生成测试报告。

另一方面,检查测试结果也应该是自动化的,测试必须能够自己决定它是通过了还是失败了,而不需要人工确认。例如你要测试一个加密函数是否正确,你不应该让测试打印出加密结果,然后人工核对输出字符串和我们期望的加密后的字符串是否一样,而是由测试本身来断言二者是否相等

func Calc256(name string) (string, error) {
    hasher := sha256.New()
    readFile, err := os.OpenFile(name, os.O_RDONLY, 0644)
    if err != nil {
        return "", err
    }
    defer readFile.Close()
    buf := make([]byte, 4096)
    for {
        n, err := readFile.Read(buf)
        if err == io.EOF {
            break
        }
        hasher.Write(buf[:n])
    }
    return hex.EncodeToString(hasher.Sum(nil))
}
 
//test
func Test_Calc256_1(t *testing.T) {
    file := "./calc256.txt"
    sha256 := "6cbdc1f9d008f7273484e63379fdadbd6b654de6"
    sha256Calc, err := Calc256(file)
    assert.Equal(t, sha256, sha256Calc)
    assert.Equal(t, nil, err)
}

2、彻底的
好的单元测试应该覆盖了被测工作单元的每一个分支执行路径,每一个可能抛出的异常,甚至每一行代码(除了哪些getXXX()和setXXX()等极端简单,不包含逻辑的方法)。如果代码中有if...else...,你不能只是测试if这个分支,而不测试else这个分支。如果使用了switch语句,同样要测试到每一个case,以及最后的default

func Test_Calc256_2(t *testing.T) {
    file := "./not_exists.txt"
    sha256 := ""
    sha256Calc, err := Calc256(file)
    assert.Equal(t, sha256, sha256Calc)
    assert.Equal(t, PathError, err)
}

 

3、可重复的

你可能感兴趣的:(知识点,单元测试)