功能测试和性能测试

代码说明

  1. 代码结构说明
    在这里插入图片描述
  2. split.go
package split

import "strings"

func Split(s, sep string) (ret []string) {
   idx := strings.Index(s, sep)
   for idx > -1 {
   	ret = append(ret, s[:idx])
   	s = s[idx+len(sep):]
   	idx = strings.Index(s, sep)
   }
   ret = append(ret, s)
   return
}

  1. split_test.go
package split

import (
	"reflect"
	"testing"
)

// 测试函数:单个测试
// func TestSplit(t *testing.T) {
// 	got := Split("我爱中国", "爱")
// 	ret := []string{"我", "中国"}
// 	if !reflect.DeepEqual(got, ret) {
// 		t.Errorf("got: %v, ret: %v", got, ret)
// 	}
// }

// 测试函数:测试组
/*
使用命令:
	1、执行测试:go test -v
	2、执行组中某一个测试:go test -run=split/test3
	3、测试覆盖率:go test -cover
	4、输出测试覆盖率文件,并使用html方式查看:go test -cover -coverprofile=c.out | go tool cover -html=c.out
*/
func TestSplit(t *testing.T) {
	type test struct {
		input string
		sep   string
		ret   []string
	}
	tests := map[string]test{
		"test1": {input: "xiangshangdexinyang", sep: "de", ret: []string{"xiangshang", "xinyang"}},
		"test":  {input: "向上的信仰", sep: "的", ret: []string{"向上", "信仰"}},
		"test3": {input: "a:b:c", sep: ":", ret: []string{"a", "b", "c"}},
	}
	for name, tc := range tests {
		t.Run(name, func(t *testing.T) {
			got := Split(tc.input, tc.sep)
			if !reflect.DeepEqual(got, tc.ret) {
				t.Errorf("got: %v, ret: %v", got, tc.ret)
			}
		})
	}
}

// 性能基准测试
/*
使用命令:
1、go test -bench=Split
结果:
BenchmarkSplit-8        10975743               106.8 ns/op	// BenchmarkSplit-8:真正工作的进程数为8;10975743:执行次数, 106.8 ns/op:每一次操作耗费106.8纳秒
PASS
ok      senior/split    2.119s

2、查看内存申请:go test -bench=Split -benchmem
goos: darwin
goarch: amd64
pkg: senior/split
cpu: Intel(R) Core(TM) i5-1038NG7 CPU @ 2.00GHz
BenchmarkSplit-8        11256488               106.6 ns/op            48 B/op          2 allocs/op	// 48 B/op: 每次操作申请48字节的内存; 2 allocs/op:每次操作
PASS
ok      senior/split    1.866s
*/
func BenchmarkSplit(b *testing.B) {
	// b.N 为不固定的数
	for i := 0; i < b.N; i++ {
		Split("我爱中国", "爱")
	}
}
  1. 查看代码覆盖率

输出测试覆盖率文件,并使用html方式查看:go test -cover -coverprofile=c.out | go tool cover -html=c.out

在这里插入图片描述