go语言的单元测试
- 对go的序列化,反序列化操作;
- 把内容写入文件,对文件进行读取;
- 通过单元测试检测正误。
monster文件 对结构体进行上述操作
package monster //只要不起主包名皆可
import (
"encoding/json"
"io/ioutil"
"fmt"
)
type Monster struct {
Name string
Age int
Skill string
}
//给Monster绑定方法Store,将Monster变量(对象),序列化后保存到文件中
func(this *Monster) Store() bool {
//先序列化
data,err := json.Marshal(this)
if err != nil {
fmt.Println("marshal err =",err)
return false
}
//保存到文件
filePath := "e:/abc.txt"
err = ioutil.WriteFile(filePath,data,0666)
if err != nil {
fmt.Println("write file err =",err)
return false
}
return true
}
//给Monster绑定方法ReStore,将一个序列化的Monster,从文件中读取,并反序列化为Monster结构体
func(this *Monster) ReStore() bool {
//1.先从文件中,读取序列化的字符串
filePath := "e:/abc.txt"
data,err := ioutil.ReadFile(filePath)
if err != nil {
fmt.Println("ReadFile err=",err)
return false
}
//2.反序列化
err = json.Unmarshal(data,this)
if err != nil {
fmt.Println("Unmarshal err=",err)
return false
}
return true
}
测试文件 monster_test.go
package monster
import (
"testing"
)
//测试用例,测试Store方法
func TestStore(t *testing.T) {
//先创建一个Monster实例
monster := &Monster{// monster文件里的方法绑定的是结构体的指针,这里创建实例时,可以使用&进行指针调用。
Name:"孙悟空",
Age:1000,
Skill:"七十二变",
}
res := monster.Store()
if !res {
t.Fatalf("monster.Store() 错误,希望为=%v,实际为=%v",true,res)
}
t.Logf("monster.Store() 测试成功")
}
func TestReStore(t *testing.T) {
//先创建一个 Monster 实例,不需要指定字段的值
var monster = &Monster{}
res := monster.ReStore()
if !res {
t.Fatalf("monster.ReStore() 错误,希望为=%v,实际为=%v",true,res)
}
if monster.Name != "孙悟空" {
t.Fatalf("monster.ReStore() 错误,希望为=%v,实际为=%v","孙悟空",res)
}
t.Logf("monster.ReStore() 测试成功")
}
测试结果:
总结:通过这个简单的代码,对前面所学知识进行了简单应用。对于这些包里的函数使用需要熟练掌握。【encoding/json包里的json.Marshal()和json.Unmarshal()】
对于文件的读写操作在前面笔记中也有记录,需要及时复习。