Golang中对结构体方法单元测试需用testing包编写TestXxx函数,构造实例调用方法并比对结果,测试文件名须为*_test.go且同包,推荐用t.Run组织子测试覆盖边界情况。
在 Golang 中对结构体方法进行单元测试,核心是通过
包编写测试函数,验证方法的行为是否符合预期。关键在于构造结构体实例、调用其方法,并比对输出结果。
准备被测结构体和方法
假设我们有一个表示用户信息的结构体
,并定义了方法
和
:
编写单元测试文件
创建同名目录下的测试文件,例如
,使用
包进行测试。
运行测试
在项目根目录执行命令:
go语言参考手册 中文CHM版
Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。本文给大家带来Go参考手册,需要的可以来下载! Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全 并行、有趣、开源 内存管理、v数组安全、编译
下载
立即学习
“
go语言免费学习笔记(深入)
”;
输出会显示每个测试用例的执行情况。如果所有断言通过,测试成功。
关键点总结:
测试文件命名应为
,且与原文件在同一包中
测试函数以
开头,参数为
使用
实现子测试,便于区分多个场景
通过构造结构体实例调用方法,验证返回值或状态变化
避免测试私有字段或实现细节,只关注公共行为
基本上就这些。写好结构体方法的测试,重点是覆盖常见输入和边界情况,确保逻辑正确。
testingUserGetFullNameIsAdultpackage main
type User struct {
FirstName string
LastName string
Age int
}
func (u *User) GetFullName() string {
return u.FirstName + " " + u.LastName
}
func (u *User) IsAdult() bool {
return u.Age >= 18
}
user_test.gotestingpackage main
import (
"testing"
)
func TestUser_GetFullName(t *testing.T) {
user := &User{
FirstName: "John",
LastName: "Doe",
}
fullName := user.GetFullName()
if fullName != "John Doe" {
t.Errorf("期望 'John Doe',实际 '%s'", fullName)
}
}
func TestUser_IsAdult(t *testing.T) {
tests := []struct {
name string
age int
want bool
}{
{"成年人", 20, true},
{"未成年人", 16, false},
{"刚好成年", 18, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
u := &User{Age: tt.age}
if got := u.IsAdult(); got != tt.want {
t.Errorf("IsAdult() = %v, want %v", got, tt.want)
}
})
}
}
go test -v
*_test.goTestXxx*testing.Tt.Run