0


Golang单元测试举例

1.第一个例子

cal.go

package main

func addUpper(n int) int {
    res := 0
    for i := 1; i <= n; i++ {
        res += i
    }
    return res
}

func getSub(n1 int, n2 int) int {
    return n1 - n2
}

cal_test.go

package main

//测试文件名必须是_test.go结尾
//测试函数必须Test开头
import (
    "fmt"
    "testing"
)

// 编写要给测试用例,去测试addUpper是否正确
func TestAddUpper(t *testing.T) {
    //调用
    res := addUpper(10)
    if res != 55 {
        //输出错误信息,退出程序
        t.Fatalf("AddUpper(10)执行错误,期望值=%v,实际值=%v\n", 55, res)
    }
    //如果正确,输出日志
    t.Logf("AddUpper(10) 执行正确...")
}

func TestHello(t *testing.T) {
    fmt.Println("TestHello被调用了")
}

// 编写要给测试用例,去测试addUpper是否正确
func TestGetSub2(t *testing.T) {
    //调用
    res := getSub(10, 3)
    if res != 7 {
        t.Fatalf("getSub(10,3)执行错误,期望值=%v,实际值=%v\n", 7, res)
    }
    //如果正确,输出日志
    t.Logf("getSub(10,3) 执行正确...")
}

说明:再GoLand中,要运行测试哪个函数可以自行选择

测试文件名必须以_test.go结尾;

测试方法的开头必须是Testxxx()

2.第二个例子,测试对象的序列化和反序列化

monster.go

package test2

import (
    "encoding/json"
    "fmt"
    "os"
)

type Monster struct {
    Name  string
    Age   int
    Skill string
}

// 序列化对象
func (this *Monster) Store() bool {
    //先序列化
    data, err := json.Marshal(this)
    if err != nil {
        fmt.Println("marshal err=", err)
        return false
    }
    //保存到文件
    filePath := "e:/monster.ser"
    err = os.WriteFile(filePath, data, 0666)
    if err != nil {
        fmt.Println("write file err=", err)
        return false
    }
    return true
}

// 反序列化对象
func (this *Monster) ReStore() bool {
    //1.从文件中读取序列化字符串
    filePath := "e:/monster.ser"
    data, err := os.ReadFile(filePath)
    if err != nil {
        fmt.Println("ReadFile err=", err)
        return false
    }

    //2.使用data []byte 反序列化
    err = json.Unmarshal(data, this)
    if err != nil {
        fmt.Println("Unmarshal err=", err)
        return false
    }
    return true
}

monster_test.go

package test2

import (
    "fmt"
    "testing"
)

func TestStrore(t *testing.T) {
    //先创建一个Monster
    monster := &Monster{
        Name:  "林动",
        Age:   20,
        Skill: "大荒芜经",
    }
    res := monster.Store()
    if !res {
        t.Fatalf("monster.Store()错误,希望为=%v 实际为=%v\n", true, res)
    }
    t.Logf("monster.Store() 测试成功")
}

func TestReStore(t *testing.T) {
    //先创建一个Monster实例,不需要指定字段的值
    var monster = &Monster{}
    res := monster.ReStore()
    if !res {
        t.Fatalf("monster.ReStore() 错误,希望=%v 实际为=%v\n", true, res)
    }
    //进一步判断
    fmt.Printf("%v %v %v\n", monster.Name, monster.Age, monster.Skill)
}
=== RUN   TestReStore
林动 20 大荒芜经
--- PASS: TestReStore (0.00s)
PASS
标签: 开发语言 golang

本文转载自: https://blog.csdn.net/m0_46306264/article/details/132630316
版权归原作者 Singcing 所有, 如有侵权,请联系我们删除。

“Golang单元测试举例”的评论:

还没有评论