Go小白入门11 - 单元测试

文章目录

  • Go标准库中有一个名为testing的测试框架,可进行单元测试,命令是go test xxx
  • 测试文件常是以xx_test.go命名,放在同一包下面

需求:完成两个复数相加 - 只需一个函数即完成了该任务。如何对该函数进行功能测试,如何快速进行单元测试呢?

1. 表格驱动型测试

  • 鼠标放在函数上右键,选择GO:Generate Unit Tests For Function可生成xx_test.go文件
  • 单测go test -run TestAdd
  • 打印log信息 - go test xxx_test.go -v
  • 单测覆盖率(进行单元测试mock时,能覆盖的代码行数占总代码行数的比率)- go test xxx_test -v -cover

2. 基准测试 - 函数名以Benchmark开头

go test -benchmem -run=. -bench=.

3. 代码

AddComplex.go文件内容

package utest

// Complex x + j*y
type Complex struct {
	Real float32
	Imag float32
}

func Add(x, y Complex) *Complex {
	return &Complex{
		Real: x.Real + y.Real,
		Imag: x.Imag + y.Imag,
	}
}

AddComplex_test.go文件内容

package utest
import (
	"fmt"
	"reflect"
	"testing"
)

func TestAdd(t *testing.T) {
	type args struct {
		x Complex
		y Complex
	}
	tests := []struct {
		name string
		args args
		want *Complex
	}{
		// TODO: Add test cases.
		{
			name: "",
			args: args{
				x: Complex{
					Real: 1.0,
					Imag: 2.0,
				},
				y: Complex{
					Real: 2.0,
					Imag: 3.0,
				},
			},
			want: &Complex{
				Real: 3.0,
				Imag: 5.0,
			},
		},
	}
	for _, tt := range tests {
		t.Run(tt.name, func(t *testing.T) {
			if got := Add(tt.args.x, tt.args.y); !reflect.DeepEqual(got, tt.want) {
				t.Errorf("Add() = %v, want %v", got, tt.want)
			}
		})
	}
}

func BenchmarkComplex(t *testing.B) {
	for i := 0; i < t.N; i++ {
		fmt.Sprintf("hello")
	}
}

4. 参考资料

Datawhale组队学习

上一篇:接口测试报告的输出(三)


下一篇:手把手带你入门C++面向对象