261_尚硅谷_单元测试综合案例

1.单元综合案例1.单元综合案例

2.单元测试综合案例_main中的结构体和方法2.单元测试综合案例_main中的结构体和方法

package main

import (
	"bufio"
	"encoding/json"
	"fmt"
	"io/ioutil"
	"os"
)

// 1) 编写一个Monster结构体, 字段 Name,Age,Skill
// 2) 给Monster绑定方法Store, 可以将一个 Monster变量(对象), 序列化后保存到文件中
// 3) 给Monster绑定方法ReStore, 可以将一个序列化的Monster, 从文件中读取,并反序列化为Monster对象,检查反序列化,
// 		名字正确
// 4) 编程测试用例文件 store_test.go,编写测试用例函数 TestStore 和 TestRestore进行测试

// todo 1) 编写一个Monster结构体, 字段 Name,Age,Skill
type Monster struct {
	Name  string
	Age   int
	Skill string
}

// todo 2) 给Monster绑定方法 Store, 可以将一个 Monster变量(对象), 序列化后保存到文件中
func Store() string {
	monster := Monster{
		// Name: "name1",
		Name:  "name2",
		Age:   18,
		Skill: "skill1",
	}
	filePath := "G:/task/go_study/261_尚硅谷_单元测试综合案例/files/monster.txt"
	file, err := os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0666)
	if err != nil {
		fmt.Printf("open file err = %v", err)
		return fmt.Sprintf("打开文件失败: %v", err)
	}
	defer file.Close()
	// 写入内容
	writer := bufio.NewWriter(file)
	// 3. 将结构体序列化为 JSON
	data, err := json.Marshal(monster)
	if err != nil {
		fmt.Println("序列化失败:", err)
		return "序列化失败"
	}
	// 4. 写入数据
	_, err = writer.Write(data)
	if err != nil {
		fmt.Println("写入失败:", err)
		return "写入失败"
	}
	// 5. 刷新缓冲区,确保所有数据写入文件
	writer.Flush()
	// fmt.Println("写入成功")
	return "写入成功"
}

// todo 3) 给Monster绑定方法ReStore, 可以将一个序列化的Monster, 从文件中读取,并反序列化为Monster对象,
//
//	检查反序列化,名字正确
func ReStore() Monster {
	// * 3.1 读取文件内容
	filePath := "G:/task/go_study/261_尚硅谷_单元测试综合案例/files/monster.txt"
	content, err := ioutil.ReadFile(filePath)
	if err != nil {
		// fmt.Printf("read file failed, err: %v\n", err)
		return Monster{}
	}
	// fmt.Printf("=============== 具体内容输出, 需要转成string ===============\n")
	// fmt.Printf("%v\n", string(content))
	str := string(content)
	// * 3.2 执行json字符串反序列化成struct
	var monster Monster
	monster_err := json.Unmarshal([]byte(str), &monster)
	if err != nil {
		fmt.Printf("unmarshal monster_err = %v\n", monster_err)
	}
	// fmt.Printf("=============== json字符串反序列化后成结构体 ===============\n")
	// fmt.Printf("%v, %T", monster, monster)
	return monster

}

// func main() {
// 	// Store()
// 	ReStore()
// }

3.单元测试综合案例_main_test中的编程测试用例,测试Store()方法和ReStore()方法3.单元测试综合案例_main_test中的编程测试用例,测试Store()方法和ReStore()方法

package main

import (
	"testing" // 引入go的testing框架包
)

// todo 4) 编程测试用例文件 store_test.go,编写测试用例函数 TestStore 和 TestRestore进行测试
// 编写一个测试用例,去测试addUpper是否正确
func TestStore(t *testing.T) {
	t.Logf("=============== TestStore start ===============")
	res := Store()
	// fmt.Printf("%v", res)
	if res != "写入成功" {
		// fmt.Println("AddUpper(10) 执行错误, 期望值=%v, 实际值= %v\n", 55, res)
		t.Fatalf("Store 执行错误\n")
	}
	// 如果正确, 输出日志

	t.Logf("Store() 执行正确, %v......", res)
	t.Logf("=============== TestStore end ===============")
}

func TestReStore(t *testing.T) {
	t.Logf("=============== TestReStore start ===============")
	res := ReStore()
	if res.Name != "name1" {
		// fmt.Printf("read file failed, err: %v\n", err)
		// ! .Fatalf()方法,后续的代码不会执行
		// t.Fatalf("contents.Name != name1, Name err: %v\n", res.Name)
		// ! .Fatal()方法,后续的代码会执行
		t.Errorf("contents.Name != name1, Name err: %v\n", res.Name)
		// t.Logf("=============== TestReStore end ===============")
	}
	// 如果正确, 输出日志

	t.Logf("res: %v\n", res)
	t.Logf("=============== TestReStore end ===============")
	// t.Fatalf("res: %v\n", res)
    
}   

4.单元测试综合案例_运行结果4.单元测试综合案例_运行结果                                                                                                     

posted on 2026-03-01 17:43  与太阳肩并肩  阅读(0)  评论(0)    收藏  举报

导航