浅触go中的单元测试
  UuDQxJhIpKD4 16天前 39 0
Go

对于一个写好的功能模块,我们还需要对其进行单元测试,确保该模块不会出现其他bug,或者输出不是期望结果
对于一个go程序,主要设计以下命令:

  • 执行测试

    go test -v / go test

  • 执行某个子测试用例

    go test -run=TestSplit/case_1

  • 查看测试覆盖率

    go test -cover

  • 将测试覆盖率结果输出到一个文件

    go test -cover -coverprofile=c.out

  • 在浏览器生成HTML报告

    go tool cover -html=c.out

以下是一个demo
创建一个split.go文件,编写函数模块Split

点击查看代码
package splitdemo

import "strings"

func Split(str string, sep string) []string {
	var ret []string
	index := strings.Index(str, sep)
	for index >= 0 {
		ret = append(ret, str[:index])
		str = str[index+1:]
		index = strings.Index(str, sep)
	}
	ret = append(ret, str)
	return ret
}

创建测试文件,split_test.go,开始测试Split函数功能
点击查看代码
package splitdemo

import (
	"reflect"
	"testing"
)

type SplitCase struct {
	str  string
	sep  string
	want []string
}

func TestSplit(t *testing.T) {
	var testMap = map[string]SplitCase{
		"case_1": {"popoe", "o", []string{"p", "p", "e"}},
		"case_2": {"my name", "n", []string{"my ", "ame"}},
		"case_3": {"hello,world", "l", []string{"he", "", "o,wor", "d"}},
	}
	for name, sc := range testMap {
		t.Run(name, func(t *testing.T) {
			got := Split(sc.str, sc.sep)
			if !reflect.DeepEqual(got, sc.want) {
				t.Fatalf("got:%#v,want:%#v", got, sc.want)
			}
		})
	}
}

执行上述命令,之后就可以看到各种信息

生成HTML报告

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 16天前 0

暂无评论

推荐阅读
  MQD0xJmbEOnQ   2024年08月12日   82   0   0 Go
  UuDQxJhIpKD4   16天前   39   0   0 Go
  yZdUbUDB8h5t   2024年08月07日   29   0   0 Go
UuDQxJhIpKD4