实例说明:

(1)一个Monster结构体,字段Name,Age,Skill

(2)Monster有一个Store方法,可以将一个Monster对象序列化后保存在文件中;

(3)Monster有一个ReStore方法,可以从文件中读取数据并且反序列化;

(4)编译测试用例文件store_test.go,填写测试用例函数TestStore和TestReStore进行测试;

目录结构:

main.go

package main

import (
"bufio"
"encoding/json"
"fmt"
"io"
"os"
) type monster struct {
Name string `json:"name"`
Age int `json:"age"`
Skill string `json:"skill"`
} func (m *monster) store() []byte {
data, err := json.Marshal(&m)
if err != nil {
fmt.Printf("序列化错误,error=%v", err)
}
return data
} func (m *monster) reStore(data string) monster {
err := json.Unmarshal([]byte(data), &m)
if err != nil {
fmt.Printf("反序列化错误,error=%v", err)
}
return *m
} func writeFile(data string, path string) {
file, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE, )
if err != nil {
fmt.Println("写入到文件中错误,error=", err)
}
defer file.Close()
writer := bufio.NewWriter(file)
writer.WriteString(data)
writer.Flush()
} func readFile(path string) string {
var str string
var e error
file, err := os.OpenFile(path, os.O_RDONLY, )
if err != nil {
fmt.Println("写入到文件中错误,error=", err)
}
defer file.Close()
reader := bufio.NewReader(file)
for {
str, e = reader.ReadString('\n')
if e == io.EOF {
break
}
//如果要返回多个数据的话,可以在这里定义一个切片进行接收每一行的str,最后返回这个切片即可
}
//这里实际上返回的是最后一行数据
return str
} func main() {
m := monster{
Name: "孙悟空",
Age: ,
Skill: "七十二变",
}
data := m.store()
fmt.Println(string(data)) // writeFile(string(data), "test.txt")
str := readFile("test.txt") var mon monster
mon = m.reStore(str)
fmt.Println(mon)
}

main_test.go

package main

import (
"fmt"
"testing"
) func TestStore(t *testing.T) {
m := &monster{
Name: "孙悟空",
Age: ,
Skill: "七十二变",
}
data := m.store()
if string(data) == "" {
t.Fatal("序列化失败")
}
t.Logf("序列化成功")
}
func TestReStore(t *testing.T) {
var m monster
str := "{\"name\":\"孙悟空\",\"age\":200,\"skill\":\"七十二变\"}"
data := m.reStore(str)
fmt.Println(data)
t.Logf("反序列化成功")
} func TestWriteFile(t *testing.T) {
m := &monster{
Name: "孙悟空",
Age: ,
Skill: "七十二变",
}
data := m.store()
writeFile(string(data), "test.txt")
t.Log("存储成功")
} func TestReadFile(t *testing.T) {
data := readFile("test.txt")
if data == "" {
t.Fatal("读取失败")
}
t.Log("读取成功")
}

golang--单元测试综合实例的更多相关文章

  1. golang 使用kcp实例

    简介kcp的具体概念与定义自行百度,特性可以浓缩为一句话,和tcp一样可靠,速度比tcp快,是一个用带宽换速度的新型协议.网上的示例代码很少,特此写一篇golang下的kcp实例. PS本文仅对ksp ...

  2. Golang 并发Groutine实例解读(二)

    go提供了sync包和channel机制来解决协程间的同步与通信. 一.sync.WaitGroup sync包中的WaitGroup实现了一个类似任务队列的结构,你可以向队列中加入任务,任务完成后就 ...

  3. golang 字符串操作实例

    package main import s "strings" import "fmt" var p = fmt.Println func main() { p ...

  4. Golang & GitLab-CI 详细实例步骤

    1.安装GitLab-Runner 1)curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi- ...

  5. Golang 并发Groutine实例解读(一)

    Go语言的并发和并行 不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话: var quit chan int = make(chan int) func loop ...

  6. Golang gin开源实例——接口

    Github地址 https://github.com/EDDYCJY/go-gin-example 返回值 字段:code.msg.data 举例 # 失败 { , "msg": ...

  7. Golang gin开源实例——表设计

    UML Model 基本模型定义 type Model struct { ID int `gorm:"primary_key" json:"id"` Creat ...

  8. 1.7.9- HTML合并单元格实例

  9. 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改

    原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...

随机推荐

  1. Linux系统管理图文详解超详细精心整理

    前言:带你遨游于linux系统管理知识的海洋,沐浴春日里的阳光,循序渐进,看完之后收获满满. 本次讲解基于linux(centos6.5)虚拟机做的测试,centos7估计以后有时间再更新啊. lin ...

  2. Linux shell脚本编程及系统启动实践

    1.编写脚本,接受二个位置参数,magedu和/www,判断系统是否有magedu,如果没有则自动创建magedu用户,并自动设置家目录为/www [root@test qiuhom]#cat che ...

  3. 【CF704D】Captain America(上下界网络流)

    [CF704D]Captain America(上下界网络流) 题面 CF 洛谷 题解 如果没有限制,似乎就不用做了...因为我们只需要贪心的选择代价较小的颜色就行了. 那么我们不妨假设染红色的代价较 ...

  4. Koa + GraphQL 示例

    初始化项目 创建 graphql-example 文件夹进入后初始化一个 package.json 文件. $ mkdir graphql-example && cd $_ $ yar ...

  5. wpf button style IsMouseOver

    <Style x:Key="workButtonStyle" TargetType="{x:Type Button}"> <Style.Tri ...

  6. 投色子--html demo

    这是之前客户想要看的一个效果,不知道放在博客里面有没有关系,当做备份吧. <!DOCTYPE HTML> <html> <head> <meta charse ...

  7. PlayJava Day009

    今日所学: /* 2019.08.19开始学习,此为补档. */ 1.Date工具类: Date date = new Date() ; //当前时间 SimpleDateFormat sdf = n ...

  8. Define the Data Model and Set the Initial Data 定义数据模型并设置初始数据

    This topic describes how to define the business model and the business logic for WinForms and ASP.NE ...

  9. 在 VS Code 中遇到的一些问题

    1.在安装时未配置右键快捷菜单,想重新添加 最简单的就是重新安装一遍,在安装过程中选择好. 其次可以通过以下注册表脚本导入(保存为 .reg 文件),注意因为有中文字符,需要使用记事本保存为 ANSI ...

  10. Runtime 类初探

    Runtime类 认识 Runtime类 在每一个JVM进程中都会存在一个Runtime类,这个类的主要功能是取得一些与运行时有关的环境属性或创建进程等操作. 在Runtime类定义的时候,它的构造方 ...