前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang--单元测试综合实例

golang--单元测试综合实例

作者头像
西西嘛呦
发布2020-08-26 14:32:00
3030
发布2020-08-26 14:32:00
举报

实例说明:

(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, 0666)
    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, 0666)
    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:   200,
        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:   200,
        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:   200,
        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("读取成功")
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档