Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > go中进行单元测试

在go中进行单元测试的案例分享

作者:coderyeah

这篇文章主要介绍了使用Go进行单元测试的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一. 基础介绍

1. 创建测试文件

2. 编写测试函数

3. 使用 t 对象进行断言和日志记录

4. 运行测试

示例

假设有一个名为 math.go 的文件,其中定义了一个函数 Sum

goCopy code// math.go
package math

func Sum(a, b int) int {
    return a + b
}

创建一个名为 math_test.go 的测试文件,其中包含以下内容:

goCopy code// math_test.go
package math

import "testing"

func TestSum(t *testing.T) {
    total := Sum(5, 5)
    if total != 10 {
        t.Errorf("Sum was incorrect, got: %d, want: %d.", total, 10)
    }
}

然后在终端中运行 go test 或 go test -v 来执行测试。

二. 综合案例

结构

monster.go

package test_case

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

type Monster struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Skill string `json:"skill"`
}

// Store 将其序列化保存为文件
func (m *Monster) Store() bool {
	data, err := json.Marshal(m)
	if err != nil {
		fmt.Println("json parse Monster err ", err)
		return false
	}
	// 写入文件
	err = os.WriteFile("d:/monster.txt", data, 0666)
	if err != nil {
		fmt.Println("write file err ", err)
		return false
	}
	return true
}

// ReStore 反序列化文件
func (m *Monster) ReStore() bool {
	data, err := os.ReadFile("d:/monster.txt")
	if err != nil {
		fmt.Println("read file err ", err)
		return false
	}
	// 将读取的数据进行反序列化
	err = json.Unmarshal(data, m)
	if err != nil {
		fmt.Println("json Unmarshal err ", err)
		return false
	}
	return true
}

monster_test.go

package test_case

import (
    "testing"
)

func TestStore(t *testing.T) {
    monster := &Monster{
       Name:  "小狐狸",
       Age:   200,
       Skill: "魅惑",
    }
    res := monster.Store()
    if !res {
       t.Fatalf("TestStore fail,expected is %v,but got %v", true, res)
    }
    t.Logf("TestStore 测试通过")

}

func TestReStore(t *testing.T) {
    monster := &Monster{} //空的结构体

    res := monster.ReStore() // 反序列化后结构体就有数据
    if !res {
       t.Fatalf("TestReStore fail,expected is %v,but got %v", true, res)
    }

    if monster.Name != "小狐狸" {
       t.Fatalf("TestStore fail,expected monster.Name is %v,but got %v", "小狐狸", monster.Name)
    }
    t.Logf("TestStore 测试通过")
}

以上就是在go中进行单元测试的案例分享的详细内容,更多关于go中进行单元测试的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文