testing框架原理:
- 创建一个以 _test.go 结尾的文件,这个文件中包含 TestXxx 开头函数,将这个文件放入要测试的文件同级包中,运行 go test 将运行以 _test.go 结尾的文件
- 原理就是testing框架将以 _test.go 结尾的文件引入,然后在main函数中调用以 TestXxx开头的函数
程序示意:
one.go文件
package main
// import "fmt"
func addUpper(n int)int{
var res int
for i:=1;i<n+1;i++{
res += i
}
return res
}
func setupper(n1 int,n2 int)int{
return n1 - n2
}
one_test.go文件
package main
import (
"testing"
)
func TestOnes(t *testing.T){
res := addUpper(10)
if res != 55 {
t.Fatalf("addUpper执行错误,期望值:%v 实际值:%v",10,res)
}
// 如果正确输出日志
t.Logf("addUpper(10)执行正确")
}
two_test.go文件
package main
import (
"testing"
)
func TestTwos(t *testing.T){
res := setupper(10,9)
if res != 1{
t.Fatalf("setupper执行错误,期望值:%v 实际值:%v",10,res)
}
t.Logf("setupper(10,9)执行正确")
}
执行结果:
PS E:\...src\goOctober\fieldemo-10-23\main\testcase> go test -v === RUN TestOnes
--- PASS: TestOnes (0.00s)
one_test.go:13: addUpper(10)执行正确
=== RUN TestTwos
--- PASS: TestTwos (0.00s)
two_test.go:12: setupper(10,9)执行正确
PASS
ok goOctober/fieldemo-10-23/main/testcase 0.246s
测试单个文件:
PS E:\...fieldemo-10-23\main\testcase> go test -v one_test.go one.go
=== RUN TestOnes
--- PASS: TestOnes (0.00s)
one_test.go:13: addUpper(10)执行正确
=== RUN TestThrees
--- PASS: TestThrees (0.00s)
one_test.go:21: setupper(10,9)执行正确
PASS
ok command-line-arguments 0.245s
测试单个函数:
注意:golang版本问题可能会产生报错
PS E:\...\main\testcase> go test -v one_test.go one.go -test.run TestOnes
moster.go
package main
import (
"fmt"
"encoding/json"
"io/ioutil"
)
type Moster struct{
Name string
Age int
Skill string
}
// 先序列化
func (mo *Moster)Scoremoto()bool{
// 将mo序列化json.Marshal(mo)返回一个byte
data,err := json.Marshal(mo)
if err != nil{
fmt.Println("marshal err=",err)
return false
}
// 保存到文件中
filepath := "d:/a.ser"
// 将data写入filepath以0666模式,传入data形式为byte切片
err = ioutil.WriteFile(filepath,data,0666)
if err != nil{
fmt.Println("write file err = ",err)
return false
}
return true
}
// 读文件
func (mo *Moster)Score()bool{
filepath := "d:/a.ser"
// 一次性读取文件内容到data中
data, err := ioutil.ReadFile(filepath)
if err != nil{
fmt.Println("read filepath err=",err)
return false
}
// 使用读取到的 []data 反序列化
err = json.Unmarshal([]byte(data), mo)
if err != nil{
fmt.Println("Unmarshal err=",err)
return false
}
return true
}
moster_test.go
package main
import "testing"
func TestOnes(t *testing.T){
m := &Moster{
Name : "tom",
Age : 19,
Skill : "吃菠萝",
}
sc := m.Scoremoto()
// 如果sc不为真返回失败反之成功
if !sc{
t.Fatalf("测试失败")
}
t.Logf("测试通过")
}
func TestTwos(t *testing.T){
var contents = &Moster{}
res := contents.Score()
if !res{
t.Fatalf("TestTwo测试不通过")
}
t.Logf("测试通过")
if contents.Name != "to"{
t.Fatalf("测试不通过")
}
t.Logf("测试通过")
}