testdemo02/monster.go
package monster
import (
"encoding/json"
"fmt"
"io/ioutil"
)
type Monster struct {
Name string
Age int
Skill string
}
// Monster 绑定 Store 方法, 序列化 并 保存到文件中
func (monster *Monster) Store() bool {
// 1、序列化
data, err := json.Marshal(monster)
if err != nil {
fmt.Println("序列化失败", err)
return false
}
// 2、保存到文件中
filePath := "d:/monster.txt"
_err := ioutil.WriteFile(filePath, data, 0666)
if _err != nil {
fmt.Println("保存文件失败", _err)
return false
}
return true
}
// Monster 绑定 ReStore 方法, 从文件中读取Json字符串, 并反序列化
func (monster *Monster) ReStore() bool {
// 1、从文件中读取Json字符串
filePath := "d:/monster.txt"
data, err := ioutil.ReadFile(filePath)
if err != nil {
fmt.Println("读取文件失败", err)
return false
}
// 2、反序列化
error := json.Unmarshal(data, &monster)
if error != nil {
fmt.Println("反序列化失败", error)
return false
} else {
fmt.Println("monster=", monster)
}
return true
}
testdemo02/monster_test.go
package monster
import (
"testing"
)
// 测试用例函数
func TestStore(t *testing.T) {
monster := Monster{
Name: "牛牛",
Age: 12,
Skill: "顶!",
}
res := monster.Store()
if !res {
t.Fatalf("monster.Store()错误, 实际为:%v, 期望为:%v", res, true)
} else {
t.Logf("monster.Store()成功, 实际为:%v, 期望为:%v", res, true)
}
}
func TestReStore(t *testing.T) {
var monster Monster
res := monster.ReStore()
if !res {
t.Fatalf("monster.Store()错误, 实际为:%v, 期望为:%v", res, true)
}
// 进一步判断
if monster.Name != "牛牛" {
t.Fatalf("monster.Name错误, 实际为:%v, 期望为:%v", monster.Name, "牛牛")
}
t.Logf("monster.Store()成功, 实际为:%v, 期望为:%v", res, true)
}
测试结果
可单独测试 go test -v -run TestStore
go test -v -run TestReStore
// go test -v
=== RUN TestStore
monster_test.go:18: monster.Store()成功, 实际为:true, 期望为:true
--- PASS: TestStore (0.00s)
=== RUN TestReStore
monster= &{牛牛 12 顶!}
monster_test.go:34: monster.Store()成功, 实际为:true, 期望为:true
--- PASS: TestReStore (0.00s)
PASS
ok go_code/unittest/testdemo02 1.104s