• 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('
    ')
            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("读取成功")
    }

  • 相关阅读:
    文件处理seek以及修改内容的两种方式
    三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
    MySQL逻辑查询语句执行顺序
    函数基础
    迭代器、生成器、面向过程编程
    3 函数
    文件处理
    字符编码
    2 数据类型、字符编码、文件处理
    转载文章之提供给开发者 10 款最好的 Python IDE
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11943870.html
Copyright © 2020-2023  润新知