介绍
在软件开发中,测试对于确保代码按预期工作至关重要。然而,由于隐私问题、数据可用性以及收集和清理数据所需的巨大努力,获取用于测试目的的真实数据可能具有挑战性。这就是生成虚假数据变得无价的地方。在 go 编程语言中,最流行的用于生成假数据的库之一是 gofakeit。
什么是 gofakeit?
gofakeit 是一个强大的库,允许开发人员生成各种随机数据用于测试目的。它支持创建真实的姓名、地址、电子邮件地址、电话号码、日期和许多其他类型信息的虚假数据。通过使用 gofakeit,开发人员可以使用虚拟数据快速填充他们的测试环境,从而使他们的测试过程更加高效和有效。
安装 gofakeit
要开始使用gofakeit,您首先需要安装该库。您可以使用 go get 命令来执行此操作:
1
|
go get -u Github.com/brianvoe/gofakeit/v6
|
生成基本的假数据
使用 gofakeit 生成基本的假数据非常简单。以下是一些例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
package main
import (
"fmt"
"github.com/brianvoe/gofakeit/v6"
)
func main() {
gofakeit.seed(0)
name := gofakeit.name()
fmt.println( "name:" , name)
email := gofakeit.email()
fmt.println( "email:" , email)
phone := gofakeit.phone()
fmt.println( "phone:" , phone)
address := gofakeit.address()
fmt.println( "address:" , address.address)
}
|
输出 –
此脚本为随机生成器播种以确保可重复性,然后生成假姓名、电子邮件、电话号码和地址。除非使用相同的种子值,否则每次运行程序时的输出都会不同。
立即学习“go语言免费学习笔记(深入)”;
定制假数据
gofakeit 还允许对生成的数据进行更精细的控制。您可以指定参数来根据您的需要定制数据。例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
package main
import (
"fmt"
"github.com/brianvoe/gofakeit/v6"
)
func main() {
gofakeit.seed(0)
person := gofakeit.person()
fmt.println( "first name:" , person.firstname)
fmt.println( "last name:" , person.lastname)
fmt.println( "email:" , person.contact.email)
fmt.println( "phone:" , person.contact.phone)
fmt.println( "ssn:" , person.ssn)
creditcard := gofakeit.creditcard()
fmt.println( "credit card number:" , creditcard.number)
fmt.println( "credit card expiration:" , creditcard. exp )
fmt.println( "credit card cvv:" , creditcard.cvv)
}
|
输出 –
使用结构标签生成假数据
gofakeit 的强大功能之一是它能够使用结构标签将假数据直接生成到结构字段中。方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
package main
import (
"fmt"
"github.com/brianvoe/gofakeit/v6"
)
type user struct {
firstname string `fake: "{firstname}" `
lastname string `fake: "{lastname}" `
email string `fake: "{email}" `
phone string `fake: "{phone}" `
birthdate string `fake: "{date}" `
}
func main() {
gofakeit.seed(0)
var user user
gofakeit.struct(&user)
fmt.printf( "user: %+v\n" , user)
users := []user{}
gofakeit.slice(&users)
fmt.printf( "lenght: %d ,users: %+v\n" , len(users), users)
}
|
输出 –
在此示例中,用户结构体使用结构体标签填充了虚假数据。此功能对于快速生成大量结构化数据特别有用。
生成假 sql 数据
生成假 sql 数据对于测试数据库相关代码也非常有帮助。 gofakeit 可用于创建填充虚假数据的 sql 插入语句。方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
package main
import (
"fmt"
"github.com/brianvoe/gofakeit/v6"
)
func main() {
gofakeit.seed(0)
sqloptions := &gofakeit.sqloptions{
Table: "people" ,
count : 2,
fields: []gofakeit.field{
{name: "id" , function : "autoincrement" },
{name: "first_name" , function : "firstname" },
{name: "price" , function : "price" },
{name: "age" , function : "number" , params: gofakeit.mapparams{ "min" : { "1" }, "max" : { "99" }}},
{name: "created_at" , function : "date" , params: gofakeit.mapparams{ "fORMat" : { "2006-01-02 15:04:05" }}},
},
}
sqldata, err := gofakeit.sql(sqloptions)
fmt.println( "err - " , err)
fmt.println(sqldata)
}
|
输出-
播种随机性
默认情况下,每次调用都会生成不可预测的数据。
要生成可重复的数据,请使用数字作为种子。使用播种数据将是可重复的。
1
2
3
4
5
|
gofakeit.Seed(1234)
name1 := gofakeit.Name()
name2 := gofakeit.Name()
|
结论
生成假数据是软件开发测试的重要组成部分。 gofakeit 提供了一种强大而灵活的方法来在 go 中创建真实的假数据。无论您需要简单的随机字符串还是复杂的数据结构,gofakeit 都可以帮助您高效地填充测试环境。通过利用这个库,您可以增强您的测试过程,使其更加健壮和可靠。