1、单元测试和基准测试
单元测试和基准测试代码开发中的重要环节,良好的单元测试和基准测试,能提升开发质量,对整体开发有非常重要的重要,下面介绍单元测试和基准测试的写法。
2、单元测试和基准测试写法
以排序基本排序算法,选择和插入为例介绍,整体代码目录如图所示
创建sort.go和对象sort_test.go
在sort.go中增加函数InsertSort和SelectSort
go
package main
func SeletSort(a []int) {
for i := 0; i < len(a)-1; i++ {
for j := i + 1; j < len(a); j++ {
if a[j] < a[i] {
a[j], a[i] = a[i], a[j]
}
}
}
}
func InsertSort(a []int) {
for j := 1; j < len(a); j++ {
for i := j; i > 0 && a[i] < a[i-1]; i-- {
a[i], a[i-1] = a[i-1], a[i]
}
}
}
单元测试需要以Test为前缀+待测试函数,在sort_test.go增加TestSelectSort函数:
go
func TestSelectSort(t *testing.T) {
testCases := []struct {
input []int
expected []int
}{
{
input: []int{8, 12, 3, 1, 4, 5},
expected: []int{1, 3, 4, 5, 8, 12},
},
{
input: []int{8, 13, 0, 9, 8, 7, 6},
expected: []int{0, 6, 7, 8, 8, 9, 13},
},
{
input: []int{10, 9, 8, 7, 6, 5, 4},
expected: []int{4, 5, 6, 7, 8, 9, 10},
},
{
input: []int{1, 2, 3, 6, 5, 4},
expected: []int{1, 2, 3, 4, 5, 6},
},
{
input: []int{7, 7, 7, 9, 9, 9, 9, 6, 6, 6},
expected: []int{6, 6, 6, 7, 7, 7, 9, 9, 9, 9},
},
}
for i := 0; i < len(testCases); i++ {
SeletSort(testCases[i].input)
if !compareSlice(testCases[i].input, testCases[i].expected) {
t.Errorf("Test case %d: Expected slice %v but received error %v", i+1, testCases[i].expected, testCases[i].input)
}
}
}
基准测试以Benchmark+待测函数,分别添加BenchmarkSelectSort和BenchmarkInsertSort
go
func BenchmarkInsertSort(b *testing.B) {
for i := 0; i < b.N; i++ {
testCases := []struct {
input []int
expected []int
}{
{
input: []int{8, 12, 3, 1, 4, 5},
expected: []int{1, 3, 4, 5, 8, 12},
},
{
input: []int{8, 13, 0, 9, 8, 7, 6},
expected: []int{0, 6, 7, 8, 8, 9, 13},
},
{
input: []int{10, 9, 8, 7, 6, 5, 4},
expected: []int{4, 5, 6, 7, 8, 9, 10},
},
{
input: []int{1, 2, 3, 6, 5, 4},
expected: []int{1, 2, 3, 4, 5, 6},
},
{
input: []int{7, 7, 7, 9, 9, 9, 9, 6, 6, 6},
expected: []int{6, 6, 6, 7, 7, 7, 9, 9, 9, 9},
},
}
for i := 0; i < len(testCases); i++ {
InsertSort(testCases[i].input)
}
}
}
func BenchmarkSelectSort(b *testing.B) {
for i := 0; i < b.N; i++ {
testCases := []struct {
input []int
expected []int
}{
{
input: []int{8, 12, 3, 1, 4, 5},
expected: []int{1, 3, 4, 5, 8, 12},
},
{
input: []int{8, 13, 0, 9, 8, 7, 6},
expected: []int{0, 6, 7, 8, 8, 9, 13},
},
{
input: []int{10, 9, 8, 7, 6, 5, 4},
expected: []int{4, 5, 6, 7, 8, 9, 10},
},
{
input: []int{1, 2, 3, 6, 5, 4},
expected: []int{1, 2, 3, 4, 5, 6},
},
{
input: []int{7, 7, 7, 9, 9, 9, 9, 6, 6, 6},
expected: []int{6, 6, 6, 7, 7, 7, 9, 9, 9, 9},
},
}
for i := 0; i < len(testCases); i++ {
SeletSort(testCases[i].input)
}
}
}
3.测试
go test 或者go test -v测试单元测试
单元测试某个函数
基准测试
基准测试某个函数