1.文件名_test結尾
2.函數名Test開頭
3.引入testing包
4.函數參數固定寫法 :t *testing.T
舉例:
calc.go:
package main
func add(a, b int) int {
return a + b
}
func sub(a, b int) int {
return a - b
}
calc_test.go:
package main
import "testing"
//名字隨便取,只要Test開頭就行
func TestAdd(t *testing.T) {
r := add(2, 4)
if r != 6 {
t.Fatalf("add(2, 4) error, expect:%d, actual:%d", 6, r)
}
t.Logf("test add success")
}
func TestSub(t *testing.T) {
r := sub(2, 4)
if r != -2 {
t.Fatalf("sub(2, 4) error, expect:%d, actual:%d", 6, r)
}
t.Logf("test add success")
}
測試命令:
go test -v (-v顯示更多信息)
舉例:
student.go:
package main
import (
"encoding/json"
"io/ioutil"
)
type student struct {
Name string
Sex string
Age int
}
func (p *student) Save() (err error) {
data, err := json.Marshal(p)
if err != nil {
return
}
err = ioutil.WriteFile("C:/stu.dat", data, 0755)
return
}
func (p *student) Load() (err error) {
data, err := ioutil.ReadFile("C:/stu.dat")
if err != nil {
return
}
err = json.Unmarshal(data, p)
return
}
student_test.go:
package main
import "testing"
import "time"
func TestSave(t *testing.T) {
stu := &student{
Name: "stu01",
Sex: "man",
Age: 10,
}
err := stu.Save()
if err != nil {
t.Fatalf("save student failed, err:%v", err)
}
}
func TestLoad(t *testing.T) {
stu := &student{
Name: "stu01",
Sex: "man",
Age: 10,
}
err := stu.Save()
if err != nil {
t.Fatalf("save student failed, err:%v", err)
}
stu2 := &student{}
time.Sleep(10 * time.Second)
err = stu2.Load()
if err != nil {
t.Fatalf("load student failed, err:%v", err)
}
if stu.Name != stu2.Name {
t.Fatalf("load student failed, name not equal")
}
if stu.Sex != stu2.Sex {
t.Fatalf("load student failed, Sex not equal")
}
if stu.Age != stu2.Age {
t.Fatalf("load student failed, Age not equal")
}
}