golang--单元测试综合实例
实例说明:
(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--单元测试综合实例的更多相关文章
- golang 使用kcp实例
简介kcp的具体概念与定义自行百度,特性可以浓缩为一句话,和tcp一样可靠,速度比tcp快,是一个用带宽换速度的新型协议.网上的示例代码很少,特此写一篇golang下的kcp实例. PS本文仅对ksp ...
- Golang 并发Groutine实例解读(二)
go提供了sync包和channel机制来解决协程间的同步与通信. 一.sync.WaitGroup sync包中的WaitGroup实现了一个类似任务队列的结构,你可以向队列中加入任务,任务完成后就 ...
- golang 字符串操作实例
package main import s "strings" import "fmt" var p = fmt.Println func main() { p ...
- Golang & GitLab-CI 详细实例步骤
1.安装GitLab-Runner 1)curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi- ...
- Golang 并发Groutine实例解读(一)
Go语言的并发和并行 不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话: var quit chan int = make(chan int) func loop ...
- Golang gin开源实例——接口
Github地址 https://github.com/EDDYCJY/go-gin-example 返回值 字段:code.msg.data 举例 # 失败 { , "msg": ...
- Golang gin开源实例——表设计
UML Model 基本模型定义 type Model struct { ID int `gorm:"primary_key" json:"id"` Creat ...
- 1.7.9- HTML合并单元格实例
- 5.在MVC中使用泛型仓储模式和工作单元来进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...
随机推荐
- python做中学(二)bool()函数的用法
定义: bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False. bool 是 int 的子类. 语法: 以下是 bool() 方法的语法: class bool([x] 参数 ...
- Java中的集合-您必须知道的13件事
Java Collections Framework是Java编程语言的核心部分之一.集合几乎用于任何编程语言中.大多数编程语言都支持各种类型的集合,例如List, Set, Queue, Stack ...
- SLB外部端口非80时---》转发到nginx---》URL跳转丢失端口的解决方案
配置nginx反向代理时遇到一个问题,当设置nginx监听80端口时转发请求没有问题.但一旦设置为监听其他端口,就一直跳转不正常: 如,访问欢迎页面时应该是重定向到登录页面,在这个重定向的过程中端口丢 ...
- keras EfficientNet介绍,在ImageNet任务上涨点明显 | keras efficientnet introduction
本文首发于个人博客https://kezunlin.me/post/88fbc049/,欢迎阅读最新内容! keras efficientnet introduction Guide About Ef ...
- Java设计模式:Abstract Factory(抽象工厂)模式
概念定义 抽象工厂(Abstract Factory)模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式中,系统的产品有多于一个的产品族(一个产品族里定义多个产品) ...
- 【CF1053E】Euler tour
[CF1053E]Euler tour 题面 CF 洛谷 大概意思是你有一棵树,然而你并不知道这棵树是啥.给你一个确定了一些位置的欧拉序(就是\(ST\)表求\(LCA\)的那个序列),问你是否存在一 ...
- .net core event bus
NServiceBus (收费) https://docs.particular.net/tutorials/quickstart/ MassTransit http://masstransit-pr ...
- 深入理解JVM,虚拟机类加载机制
类加载过程概览 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括以下7个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Re ...
- 使用Node.js简单创建一个服务器
首先,我们要了解Node.js不是一种语言,它只是一个除了浏览器之外的,可以运行js的环境. 其次,Node能做些什么 ? web服务器. 命令行工具. 网络爬虫. 桌面应用程序开发等 3.接下 ...
- DB2 catalog 编目
(步骤)ap用户: (1)进入db2 db2 (2)catalog database 命令 catalog db list (3)查看本地节点目录.IP.节点名.服务名称.目录条目类型 list no ...