testdemo02/monster.go
package monsterimport ("encoding/json""fmt""io/ioutil")type Monster struct {Name stringAge intSkill 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 monsterimport ("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 Monsterres := 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 TestStoremonster_test.go:18: monster.Store()成功, 实际为:true, 期望为:true--- PASS: TestStore (0.00s)=== RUN TestReStoremonster= &{牛牛 12 顶!}monster_test.go:34: monster.Store()成功, 实际为:true, 期望为:true--- PASS: TestReStore (0.00s)PASSok go_code/unittest/testdemo02 1.104s
