Go测试

单元测试

命令:go test -v -cover

表格单元测试

被测试函数

package unit

func Square(n int) int {
	return n * n
}

表格测试编写

package unit

import "testing"

func TestSquare(t *testing.T) {
	inputs := [...]int{1,2,3}
	expected := [...]int{1,4,9}
	for i,v := range inputs{
		if Square(v) != expected[i]{
			t.Errorf("Input is %d, the expected is %d, the actual %d", v, expected[i], expected[i])
		}
	}
}

关键字

  • Fail, Error: 该测试失败,该测试继续,其他测试继续执行
  • FailNow, Fatal: 该测试失败,该测试中止,其他测试继续执行
package unit

import (
	"fmt"
	"testing"
)

func TestErrorInCode(t *testing.T)  {
	fmt.Println("Start")
	t.Error("Error")
	fmt.Println("End")
}

func TestFailInCode(t *testing.T)  {
	fmt.Println("Start")
	t.Fatal("Error")
	fmt.Println("End")
}

性能测试

命令(运行所有):go test -bench=.
命令(运行指定):go test -bench=BenchmarkConcatStringByAdd
命令(详细比较):go test -bench=. -benchmem

写法

func BenchmarkConcatStringByAdd(b *testing.B){
    // 与性能测试无关的代码
    b.ResetTimer()
    for i:=0; i<b.N;i++{
        // 测试代码
    }
    // 与性能测试无关的代码
    b.StopTimmer()
}

示例

package benchmark

import (
	"bytes"
	"github.com/stretchr/testify/assert"
	"testing"
)

func TestConcatStringByAdd(t *testing.T) {
	assert := assert.New(t)
	elems := []string{"1", "2", "3", "4", "5"}
	ret := ""
	for _, elem := range elems {
		ret += elem
	}
	assert.Equal("12345", ret)
}

func TestConcatStringByBytesBuffer(t *testing.T) {
	assert := assert.New(t)
	var buf bytes.Buffer
	elems := []string{"1", "2", "3", "4", "5"}
	for _, elem := range elems {
		buf.WriteString(elem)
	}
	assert.Equal("12345", buf.String())
}

func BenchmarkConcatStringByAdd(b *testing.B) {
	elems := []string{"1", "2", "3", "4", "5"}
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		ret := ""
		for _, elem := range elems {
			ret += elem
		}
	}
	b.StopTimer()
}

func BenchmarkConcatStingByBytesBuffer(b *testing.B) {
	elems := []string{"1", "2", "3", "4", "5"}
	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		var buf bytes.Buffer
		for _, elem := range elems {
			buf.WriteString(elem)
		}
	}
	b.StopTimer()
}

BDD

BDD(Behavior Driven Development),直译是行为驱动开发,主要是为了解决验收功能的业务人员与开发人员之间的沟通问题

package BDD

import (
	. "github.com/smartystreets/goconvey/convey"
	"testing"
)

func TestSpec(t *testing.T) {

	// Only pass t into top-level Convey calls
	Convey("Given some integer with a starting value", t, func() {
		x := 1

		Convey("When the integer is incremented", func() {
			x++

			Convey("The value should be greater by one", func() {
				So(x, ShouldEqual, 2)
			})
		})
	})
}

详细使用点这里

posted @ 2020-01-03 17:33  黄土地上的黑石头  阅读(163)  评论(0编辑  收藏  举报