golang--单元测试综合实例

时间:2022-07-23
本文章向大家介绍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, 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("读取成功")
}