Go |單元測試的方法

Go提供了一套輕量級的測試框架。

需要進行單元測試的文件命明規則如下:在需要測試的包下面創建以“_test”結尾的go文件。如下圖,在包Simplemath下建立了add.go和stack.go兩個go文件,它們各自的測試文件是add_test.go和stack_test.go。

Go的單元測試函數分爲功能測試函數和性能測試函數。這裏先說功能性測試函數。

測試函數的聲明要以TestXXX的形式開頭,並且形參爲 (t *testing.T)。比如兩個文件和其對應的測試文件。在測試函數中,可以使用t.Errorf打印錯誤信息。

package Simplemath

func Add(a, b int) int {
	return a + b
}
package Simplemath

import "testing"

func TestAdd(t *testing.T) {
	re:=Add(1,1)
	if re!=3{
		t.Errorf("Add 方法出錯了!")
	}

}
package Simplemath

import "fmt"

type Stack struct {
	arr []interface{}
}

func (s *Stack) CreateStack() *Stack {
	s.arr = []interface{}{}
	return s
}

func (s *Stack) push(a interface{}) {
	s.arr = append(s.arr, a)
}

func (s *Stack) pop() (a interface{}, error error) {
	if len(s.arr) == 0 {
		//fmt.Errorf可以打印錯誤信息
		error = fmt.Errorf("棧中沒有元素")
	}
	a = s.arr[len(s.arr)-1]
	s.arr = s.arr[:len(s.arr)-1]
	return
	//return a,error
}
package Simplemath

import "testing"
//可以對方法分開測試,
//也可以對方法進行整體測試,這個時候需要考慮整體的輸出結果,包括前面的處理,不是隻考慮方法中
var stack Stack
func TestStack_CreateStack(t *testing.T) {
	stack.CreateStack()
	if stack.arr==nil{
		t.Errorf("初始化失敗")
	}
}

func TestStack_push(t *testing.T) {
	stack.push(1)
	stack.push(2)
	stack.push(3)

	if len(stack.arr)!=3{
		t.Errorf("入棧失敗!")
	}
}

func TestStack_Pop(t *testing.T) {
	stack.push(1)
	stack.push(1)
	stack.push(1)

	stack.pop()
	stack.pop()

	if len(stack.arr)!=3{
		t.Errorf("出棧失敗!")
	}
}

在命令行測試的時候,可以在IDE中進行測試,也可以在通過命令行測試,這裏主要講命令行測試。

在測試之前首先要確保將項目根目錄路徑加入了GOPATH,可以使用go env 命令查看是否設置了。比如我的項目名爲FristGo,則GOPATH=C:\Users\27124\IdeaProjects\FristGo。

在單元測試的時候,可以對整個包測試,對某個文件測試,對某個文件的某個方法測試。下面分別講下具體方法。

(1)對包進行測試

之後進入到剛設置的目錄中,在該路徑的任何子路徑下都能對整個包進行測試,比如這裏對Simplmath進行測試。
對整個包中所有測試文件進行測試格式:go test + 包名

在這裏插入圖片描述

(2)對某個文件進行測試

在對文件進行測試的時候,要注意兩點:

  • 需要進入具體的包,不然會提示錯誤,如下圖。
  • 使用go test -v add_test.go add.go 的格式進行測試。即要加上源文件
  • 測試的結果是各個函數連續測試的結果,不是單獨測試的結果,也就是說,上一個方法的處理結果會繼續用到下一個方法

(3)對某個文件的某個函數進行測試

在對某個文件的某個方法進行測試的時候,也許要注意兩點:

  • 需要進入具體的包,不然會提示錯誤,如下圖。
  • 使用 go test -v -test.run TestRefreshAccessToken 的格式進行測試。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章