1、表格驱动测试
例子1:
待测试代码文件:src/selftesting/basic/basic.go
package basic
import (
"fmt"
"math"
)
func triangle(){
var a, b int = 3, 4
fmt.Println(CalcTriangle(a, b))
}
func CalcTriangle(a, b int) int {
var c int
c = int(math.Sqrt( float64( a*a + b*b)))
return c
}
一般测试文件的命名为:待测试函数名_test.go,如getuserdata_test.go
测试代码文件:src/selftesting/triangle_test.go
package main
import (
"selftesting/basic"
"testing"
)
func TestTriangle(t *testing.T){
tests := []struct{ a, b, c int} {
{3, 4, 5},
{5, 12, 13},
{8, 15, 17},
{12, 35, 37},
{30000, 40000, 50000},
}
for _, tt := range tests {
actual := basic.CalcTriangle(tt.a, tt.b)
if actual != tt.c {
t.Errorf( "calcTriangle(%d %d);" +
"got %d; expected %d",
tt.a, tt.b, actual, tt.c)
}
}
}
func main() {
}
命令行运行测试
go test . :表示将当前目录下的测试拿来运行
例子2
/src/norepeatingsubstr/norepeatstr_test.go
package main
import "testing"
func TestSubstr( t *testing.T){
tests := []struct{
s string
ans int
} {
{"abcabcbb", 3},
{"pwwkew", 3},
{"", 0},
{"b", 1},
{"bbbbbb", 1},
{"abcabcabcd", 4},
}
for _, tt := range tests {
actual := NonRepeatingSubStr(tt.s)
if actual != tt.ans {
t.Errorf("got %d for input %s; expected %d",
actual, tt.s, tt.ans)
}
}
}
/src/norepeatingsubstr/norepeatsubstr.go
package main
func NonRepeatingSubStr(s string) int {
lastOccurred := make(map[byte]int)
start := 0
maxLength := 0
for i, ch := range []byte(s) {
lastI, ok := lastOccurred[ch]
if ok && lastI >= start {
start = lastI + 1
}
if i-start+1 > maxLength {
maxLength = i - start + 1
}
lastOccurred[ch] = i
}
return maxLength
}
2.代码覆盖率
goland查看代码覆盖率
命令行查看代码覆盖率
第一步:生成c.out文件
在测试文件处执行命令:go test -coverprofile=c.out
第二步:将c.out生成html文件,查看代码覆盖率
执行命令:go tool cover -html=c.out
3.测试性能
主要是为了查看程序运行的速度
例子1(使用goland编辑器测试)
/src/norepeatingsubstr/norepeatstr_test.go
package main
import "testing"
func TestSubstr( t *testing.T){
tests := []struct{
s string
ans int
} {
{"abcabcbb", 3},
{"pwwkew", 3},
{"", 0},
{"b", 1},
{"bbbbbb", 1},
{"abcabcabcd", 4},
{"sfdsafqwjioqwjgdsjflk", 9},
}
for _, tt := range tests {
actual := NonRepeatingSubStr(tt.s)
if actual != tt.ans {
t.Errorf("got %d for input %s; expected %d",
actual, tt.s, tt.ans)
}
}
}
//测试性能函数
func BenchmarkNonRepeatingSubStr(b *testing.B) {
s := "sfdsafqwjioqwjgdsjflk"
ans := 9
for i := 0; i < b.N; i++ {
actual := NonRepeatingSubStr(s)
if actual != ans {
b.Errorf("got %d for input %s; expected %d",
actual, s, ans)
}
}
}
/src/norepeatingsubstr/norepeatsubstr.go
package main
import "fmt"
func NonRepeatingSubStr(s string) int {
lastOccurred := make(map[byte]int)
start := 0
maxLength := 0
for i, ch := range []byte(s) {
lastI, ok := lastOccurred[ch]
if ok && lastI >= start {
start = lastI + 1
}
if i-start+1 > maxLength {
maxLength = i - start + 1
}
lastOccurred[ch] = i
}
return maxLength
}
func main(){
fmt.Println("test")
}
例子2(使用命令行测试)
第一步:运行命令:go test -bench
第二步:查看运行结果