实例说明:

(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. IT兄弟连 HTML5教程 HTML5和JavaScript的关系

    JavaScript可是实现HTML5重要语言.长久以来,JavaScript一直都是在HTML中实现动态效果的不二之选,而JavaScript在一些程序员眼里都是编程语言中的二等公民.早先,它经常是 ...

  2. GPU跑tf-faster-rcnn demo以及训练自己的数据

    https://blog.csdn.net/qq_39123369/article/details/85245512

  3. php使用inotify扩展监控文件或目录,如果发生改变,就执行指定命令

    通过inotify扩展监控文件或目录的变化,如果发生变化,就执行命令. 可以应用于 swoole 中,如果文件发生变化,就执行 kill -USR1 进程PID 来实现热更新. <?php cl ...

  4. Fragment生命周期函数调用(ViewPager切换方式)

    在使用ViewPager时,Google亲爹为我们提供了多种PagerAdapter.其中,与Fragment相关的是FragmentPagerAdapter和FragmentStatePagerAd ...

  5. 聊聊业务系统中投递消息到mq的几种方式

    背景 电商中有这样的一个场景: 下单成功之后送积分的操作,我们使用mq来实现 下单成功之后,投递一条消息到mq,积分系统消费消息,给用户增加积分 我们主要讨论一下,下单及投递消息到mq的操作,如何实现 ...

  6. C#程序员在老项目中用到VB遇到的一次坑

    博主自认为C#基础还不错.但是最近接到一个需求,是用VB写的.万般不愿意,不想接触VB,并不是说VB语言不好,而是我真的不喜欢VB.因为没基础过VB,领导派给的任务,有这个需求,不愿意归不愿意,领导给 ...

  7. [20190918]关于函数索引问题.txt

    [20190918]关于函数索引问题.txt 1.环境:SCOTT@test01p> @ ver1PORT_STRING                    VERSION        BA ...

  8. RdKafka文档翻译

    函数string rd_kafka_err2str ( integer $err ) 将rdkafka错误代码转换为字符串 integer rd_kafka_errno2err ( integer $ ...

  9. liteos动态加载(十三)

    1. 概述 1.1 基本概念 动态加载是一种程序加载技术. 静态链接是在链接阶段将程序各模块文件链接成一个完整的可执行文件,运行时作为整体一次性加载进内存.动态加载允许用户将程序各模块编译成独立的文件 ...

  10. ntp服务设置开机自启动失败

    设置了ntpd开机自启动,重启服务器ntpd没有自启动 1.需要禁掉chronyd.service: systemctl disable chronyd.service 2.手动启动ntpd: sys ...