261_尚硅谷_单元测试综合案例
1.单元综合案例
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()方法
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.单元测试综合案例_运行结果
浙公网安备 33010602011771号