testdemo02/monster.go

  1. package monster
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "io/ioutil"
  6. )
  7. type Monster struct {
  8. Name string
  9. Age int
  10. Skill string
  11. }
  12. // Monster 绑定 Store 方法, 序列化 并 保存到文件中
  13. func (monster *Monster) Store() bool {
  14. // 1、序列化
  15. data, err := json.Marshal(monster)
  16. if err != nil {
  17. fmt.Println("序列化失败", err)
  18. return false
  19. }
  20. // 2、保存到文件中
  21. filePath := "d:/monster.txt"
  22. _err := ioutil.WriteFile(filePath, data, 0666)
  23. if _err != nil {
  24. fmt.Println("保存文件失败", _err)
  25. return false
  26. }
  27. return true
  28. }
  29. // Monster 绑定 ReStore 方法, 从文件中读取Json字符串, 并反序列化
  30. func (monster *Monster) ReStore() bool {
  31. // 1、从文件中读取Json字符串
  32. filePath := "d:/monster.txt"
  33. data, err := ioutil.ReadFile(filePath)
  34. if err != nil {
  35. fmt.Println("读取文件失败", err)
  36. return false
  37. }
  38. // 2、反序列化
  39. error := json.Unmarshal(data, &monster)
  40. if error != nil {
  41. fmt.Println("反序列化失败", error)
  42. return false
  43. } else {
  44. fmt.Println("monster=", monster)
  45. }
  46. return true
  47. }

testdemo02/monster_test.go

  1. package monster
  2. import (
  3. "testing"
  4. )
  5. // 测试用例函数
  6. func TestStore(t *testing.T) {
  7. monster := Monster{
  8. Name: "牛牛",
  9. Age: 12,
  10. Skill: "顶!",
  11. }
  12. res := monster.Store()
  13. if !res {
  14. t.Fatalf("monster.Store()错误, 实际为:%v, 期望为:%v", res, true)
  15. } else {
  16. t.Logf("monster.Store()成功, 实际为:%v, 期望为:%v", res, true)
  17. }
  18. }
  19. func TestReStore(t *testing.T) {
  20. var monster Monster
  21. res := monster.ReStore()
  22. if !res {
  23. t.Fatalf("monster.Store()错误, 实际为:%v, 期望为:%v", res, true)
  24. }
  25. // 进一步判断
  26. if monster.Name != "牛牛" {
  27. t.Fatalf("monster.Name错误, 实际为:%v, 期望为:%v", monster.Name, "牛牛")
  28. }
  29. t.Logf("monster.Store()成功, 实际为:%v, 期望为:%v", res, true)
  30. }

测试结果

可单独测试 go test -v -run TestStore
go test -v -run TestReStore

  1. // go test -v
  2. === RUN TestStore
  3. monster_test.go:18: monster.Store()成功, 实际为:true, 期望为:true
  4. --- PASS: TestStore (0.00s)
  5. === RUN TestReStore
  6. monster= &{牛牛 12 顶!}
  7. monster_test.go:34: monster.Store()成功, 实际为:true, 期望为:true
  8. --- PASS: TestReStore (0.00s)
  9. PASS
  10. ok go_code/unittest/testdemo02 1.104s