实例说明:

(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. React: React脚手架

    一.简言 React开发目前已经非常流行,对于如何实现对React项目的管理和维护,React生态圈出现了大量可用的开发工具,例如Browserify.Gulp.Grunt.webpack等.其中,w ...

  2. js 的cookie问题

    获取时解码可以用decodeURIComponent(),代替 unescape() // 设置cookiefunction setCookie(name,value) { var Days = 30 ...

  3. JS 从内存空间谈到垃圾回收机制

     壹 ❀ 引 从事计算机相关技术工作的同学,对于内存空间相关概念多少有所耳闻,毕竟像我这种非计算机科班出身的人,对于栈堆,垃圾回收都能简单说道几句:当我明白JS 基本类型与引用类型数据存储方式不同,才 ...

  4. Linux安全加固及文本处理之awk实践

    1.编写脚本selinux.sh,实现开启或禁用SELinux功能 [root@ansible_centos7 ~]# cat selinux.sh #!/bin/bash # #********** ...

  5. PHP框架 fastadmin 根据条件判断字段的显示隐藏

    首先,因为fastadmin的JS里面字段不支持function函数  里面只能填false或true,不能动态判断显示隐藏, 后面通过看文档发现能在表格初始化的地方判断  如图,就可以实现根据lin ...

  6. Python【day 15-2】基本数据类型-dict tuple set

    '''''' ''' 变量的数据类型 int str bool list 5.字典 dict 定义和写法:由{}表示,每个元素是key:value的键值对形式,元素间是逗号隔开 特点: 1.key是可 ...

  7. Java之线程与进程

    一.线程与进程 线程:一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务.多线程是多任务的一种特别形式,但多线程使用了更小的资源开销. 进程:一个进程包括 ...

  8. Netty与RPC

    一.Netty原理 Netty是一个高性能.异步事件驱动的NIO框架,基于Java NIO提供的API实现.它提供了对TCP.UDP和文件传输的支持,作为一个异步NIO框架,Netty的所有IO操作都 ...

  9. Web基础--HTML、Css入门

    一.Web项目(可跳过,直接从下一个标题开始) 1.Web项目: 指的是带网页的项目,通过浏览器可以访问的项目.比如:淘宝.天猫等. 2.Web项目构成: 浏览器(客户端).服务器.数据库. 3.Ja ...

  10. 安卓开发笔记(三十二):banner轮播图的实现

    一.activity.xml 我这里主要爬取的爱奇艺首页的图片进行轮播,应用了两个github上的开源库,一个banner的库,一个加载网络图片的库,用开源库能够极大地节省我们编写代码的时间. < ...