Golang案例:编写功能测试和性能测试

功能测试和性能测试

代码说明

GitHub代码链接

  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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H . C . Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值