go語言測試方法
測試split
package split
import "strings"
func Split(s, seq string) (result []string) {
i := strings.Index(s, seq)
for i>-1 {
result = append(result, s[:i])
s = s[i+len(seq):]
//s = s[i+1:]
i = strings.Index(s, seq)
}
result = append(result, s)
return result
}
編寫的測試函數(shù)
package split
import (
"reflect"
"testing"
)
//測試切片為長度為1的字符串時(shí)
func TestSplit(t *testing.T) {
got := Split("a:b:c",":")
want := []string{"a", "b", "c"}
if !reflect.DeepEqual(got,want) {
t.Errorf("go= %v, want= %v", got, want)
}
}
//測試長度大于1的字符串切片
func TestMoreSplit(t *testing.T) {
got := Split("abcd", "bc")
want := []string{"a","d"}
if !reflect.DeepEqual(got, want) {
t.Errorf("got= %v, want= %v", got, want)
}
}
//組合測試双泪,多組測試
func TestSplitM(t *testing.T) {
//定義測試用的結(jié)構(gòu)體
type test struct {
input string
seq string
want []string
}
//測試用例使用Map進(jìn)行存儲
tests := []test{
{"a:b:c:d",":",[]string{"a","b","c","d"}},
{"a:b:c",",",[]string{"a:b:c"}},
{"abcd","bc",[]string{"a","d"}},
{"我愛你","愛",[]string{"我","你"}},
}
//使用range循環(huán)測試每一個(gè)test用例
for _,tc := range tests {
got := Split(tc.input, tc.seq)
if !reflect.DeepEqual(got, tc.want) {
t.Errorf("got= %#v, want= %#v", got, tc.want)
}
}
}
//子測試
func TestSplitSample(t *testing.T) {
type test struct{
input string
seq string
want []string
}
tests := map[string]test{
"simple seq" : {"a:b:c",":",[]string{"a","b","c"}},
"wrong seq" : {"a:b:c",",",[]string{"a:b:c"}},
"more seq" : {"abcd","bc",[]string{"a","d"}},
"leading seq" : {"我愛你","愛",[]string{"我","你"}},
}
for name,tc := range tests {
got := Split(tc.input,tc.seq)
if !reflect.DeepEqual(got, tc.want) {
t.Errorf("name= %#v, got= %#v, want= %#v", name, got ,tc.want)
}
}
}
func TestSplit2(t *testing.T) {
type test struct {
input string
seq string
want []string
}
tests := map[string]test{
"simple seq" : {"a:b:c",":",[]string{"a","b","c"}},
"wrong seq" : {"a:b:c",",",[]string{"a:b:c"}},
"more seq" : {"abcd","bc",[]string{"a","d"}},
"leading seq" : {"我愛你","愛",[]string{"我","你"}},
}
for name,tc := range tests {
t.Run(name, func(t *testing.T) {
got := Split(tc.input, tc.seq)
if !reflect.DeepEqual(got, tc.want) {
t.Errorf("name= %#v, got= %#v, want= %#v", name, got ,tc.want)
}
})
}
}
go 測試使用的命令
//go的測試命令
go test 執(zhí)行所有的測試Test*方法
go test -v 執(zhí)行所有測試方法,并查看每一個(gè)的測試執(zhí)行
go test -v -run=*** 執(zhí)行某一個(gè)測試用例
go test -cover 測試覆蓋率
go test -cover -coverprofile=c.out 測試覆蓋率,并將覆蓋率寫到文件c.out中
go tool cover -html=c.out 在html中顯示覆蓋率
image.png