Golang - 使用 GoFakeIt 生成 Mock 數據

介紹

在軟件開發中,測試至關重要,以確保代碼能夠按預期工作。然而出於隱私考慮、數據可用性以及收集和清理數據,使用真實數據進行測試是不合理的。我們需要生成 Mock 數據來進行測試。在 Go 編程語言中,用於生成假數據的最流行庫之一是 GoFakeIt[1]。

什麼是 GoFakeIt?

GoFakeIt 是一個強大的庫,允許開發人員爲測試目的生成各種隨機數據。它支持創建名字、地址、電子郵件地址、電話號碼、日期等信息的真實假數據。通過使用 GoFakeIt,開發人員可以快速地用虛擬數據填充他們的測試環境,使他們的測試過程更加高效和有效。

安裝 GoFakeIt

要開始使用 GoFakeIt,首先需要安裝庫。可以使用 go get 命令來完成這個操作:

go get -u github.com/brianvoe/gofakeit/v6

生成基礎 Mock 數據

使用 GoFakeIt 生成基礎假數據非常簡單。以下是一些代碼示例:

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)
}

輸出:

這個腳本設置了隨機生成器的種子,以確保可重複性,然後生成一個假名字、電子郵件、電話號碼和地址。除非你使用相同的種子值,否則每次運行程序時輸出都會不同。

自定義 Mock 數據

GoFakeIt 還允許對生成的數據進行更細粒度的控制。您可以指定參數來定製數據以滿足您的需求。例如:

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)
}

輸出:

使用結構標籤生成 Mock 數據

GoFakeIt 的一個強大特性是它能夠直接使用結構標籤將假數據生成到結構字段中。以下是代碼示例:

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)
}

輸出:

使用結構標籤生成假數據

在這個例子中,User 結構體使用結構標籤填充了假數據。這個特性特別適合快速生成大量結構化數據。

生成 Mock SQL 數據

生成假 SQL 數據對於測試數據庫相關代碼也非常有幫助。GoFakeIt 可以用來創建填充了假數據的 SQL 插入語句。以下是如何做到這一點的示例:

package main

import (
    "fmt"
    "github.com/brianvoe/gofakeit/v6"
)

func main() {
    // 種子隨機生成器
    gofakeit.Seed(0)

    sqloptions := &gofakeit.SQLOptions{
        Table: "people", // 表名
        Count: 2, // sql記錄的數量
        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)
}

輸出:

種子隨機性

默認情況下,每次調用都會生成不可預測的數據。

要生成可重複的數據,可以用一個數字進行種子設置。使用種子後,數據將可重複。

gofakeit.Seed(1234) // 任何 int64 數字

// 現在結果是可重複的
name1 := gofakeit.Name() 
name2 := gofakeit.Name()

結論

生成假數據是軟件開發測試中的一個重要部分。GoFakeIt 提供了一種強大且靈活的方式來在 Go 中創建真實的假數據。無論您是需要簡單的隨機字符串還是複雜的數據結構,GoFakeIt 都可以幫助您高效地填充測試環境。通過利用這個庫,您可以增強您的測試過程,使其更加健壯和可靠。

參考資料

[1]

gofakeit: github.com/brianvoe/gofakeit

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/G5wy-llHSqmOGGN_9B6vbg