一、单元测试

1.0 go test

go test_test.go
*_test.go

1.1 测试函数

每个测试函数必须导入testing包。测试函数有如下的签名:

func TestName(t *testing.T) {
    // ...
}

测试函数的名字必须以Test开头,可选的后缀名必须以大写字母开头:

func TestSin(t *testing.T) { /* ... */ }
func TestCos(t *testing.T) { /* ... */ }
func TestLog(t *testing.T) { /* ... */ }

1.2 表格驱动测试

所谓的表格驱动测试就是将测试用例和程序进行分离,将所有的测试用例放在一个数组中:

例如,需要测试一个加法函数的正确性:
在这里插入图片描述

  • AddComputer.go
package base

func Add(a, b int) int {
	return a + b
}
  • add_test.go
package main

import (
	"test/base"
	"testing"
)

func TestAdd(t *testing.T) {
	tests := []struct{ a, b, c int }{
		{0, 0, 0},
		{1, 1, 2},
		{-1, 1, 0},
		{2, 2, 4},
		{1, 0, 0},
	}
	for _, tt := range tests {
		result := base.Add(tt.a, tt.b)
		if result != tt.c {
			 t.Errorf("got %v, %v input;" +
			 	"expect %v ;but got %v",tt.a, tt.b, tt.c, result)
		}
	}
}
go test add_test.go

二、覆盖率测试

https://books.studygolang.com/gopl-zh/ch11/ch11-03.html

对待测程序执行的测试的程度称为测试的覆盖率。

三、基准测试

https://books.studygolang.com/gopl-zh/ch11/ch11-04.html

基准测试是测量一个程序在固定工作负载下的性能。