Hur man genererar falska testdata med Go

För att säkerställa hög kvalitet och full funktionalitet i dina applikationer, är det nödvändigt med pålitliga och realistiska testdata. Möjligheten att skapa konstgjorda data som efterliknar autentiska scenarier är en ovärderlig kompetens inom många testområden.

Standardbiblioteket erbjuder inte inbyggt stöd för generering av falska data, men det finns ett brett utbud av paket i Gos ekosystem. Ett populärt alternativ för detta ändamål är Gofakeit.

Introduktion till Gofakeit

Gofakeit är ett användbart paket för att generera simulerad data direkt i dina Go-program.

Detta paket tillhandahåller en mängd funktioner, inklusive slumpmässig datagenerering för olika datatyper. Dessutom erbjuder Gofakeit anpassningsbara inställningar för att matcha specifika format, stöd för lokalisering samt realistisk tids- och datumgenerering.

För att inkludera Gofakeit som ett beroende i ditt projekt, kör följande kommando i din projekts arbetskatalog (förutsatt att du redan har initierat ett Go-projekt):

go get github.com/brianvoe/gofakeit/v6

Efter att Gofakeit har lagts till som ett beroende, kan du importera paketet med följande kod:

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

Sammanfattningsvis, Gofakeit innehåller det mesta av funktionaliteten som man kan förvänta sig av ett paket för falsk datagenerering.

Skapa enkel falsk data med Gofakeit

Gofakeit har stöd för att generera en variation av datatyper, såsom namn, e-postadresser, telefonnummer, företagsfraser och mer.

Här är ett exempel på hur du kan generera grundläggande falsk data med Gofakeit:

package main

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

func main() {

    name := gofakeit.Name()
    fmt.Println("Name:", name)

    email := gofakeit.Email()
    fmt.Println("Email:", email)

    phone := gofakeit.Phone()
    fmt.Println("Phone:", phone)

    company := gofakeit.Company()
    fmt.Println("Company:", company)

    creditCard := gofakeit.CreditCardNumber()
    fmt.Println("Credit Card:", creditCard)

    hackerPhrase := gofakeit.HackerPhrase()
    fmt.Println("Hacker Phrase:", hackerPhrase)

    jobTitle := gofakeit.JobTitle()
    fmt.Println("Job Title:", jobTitle)

    currency := gofakeit.CurrencyShort()
    fmt.Println("Currency:", currency)
}

I huvudfunktionen skapas flera falska värden med hjälp av Gofakeit och dessa skrivs ut i konsolen med hjälp av `Println`-funktionen från `fmt`-paketet.

Gofakeit använder `struct`-taggar för att generera data för olika fält. När dessa taggar används kommer Gofakeit att initialisera fälten med slumpmässig, falsk data.

import (
    "fmt"
    "time"

    "github.com/brianvoe/gofakeit/v6"
)

type Person struct {
    ID string `fake:"{uuid}"`
    FirstName string `fake:"{firstname}"`
    LastName string `fake:"{lastname}"`
    Age int `fake:"{number:18,60}"`
    Email string `fake:"{email}"`
    Address string `fake:"{address}"`
    CreatedAt time.Time `fake:"{date}"`
}

func main() {
    var person Person

    gofakeit.Struct(&person)

    fmt.Printf("ID: %s\n", person.ID)
    fmt.Printf("First Name: %s\n", person.FirstName)
    fmt.Printf("Last Name: %s\n", person.LastName)
    fmt.Printf("Age: %d\n", person.Age)
    fmt.Printf("Email: %s\n", person.Email)
    fmt.Printf("Address: %s\n", person.Address)
    fmt.Printf("Created At: %s\n", person.CreatedAt)
}

Fälten i `Person` strukturen använder falska `struct`-taggar. I `main`-funktionen skapas en variabel `person` som är en instans av `Person`-strukturen.

Metoden `gofakeit.Struct` fyller i publika fält av en struktur med slumpmässig data baserat på värdet av den falska taggen för de publika fälten. Slutligen skriver `main`-funktionen ut strukturens fält till konsolen.

Generera komplexa falska data

Med Gofakeit kan du även skapa komplexa falska data, inklusive slumpmässiga meningar, stycken och lorem ipsum-texter med funktionerna `Sentence`, `Paragraph` och `LoremIpsumParagraph`.

package main

import (
    "fmt"

    "github.com/brianvoe/gofakeit/v6"
)

func generateRandomSentence() string {

    sentence := gofakeit.Sentence(6)
    return sentence
}

func generateRandomParagraph() string {

    paragraph := gofakeit.Paragraph(3, 4, 8, "/n")
    return paragraph
}

func generateLoremIpsum() string {

    loremIpsum := gofakeit.LoremIpsumParagraph(3, 5, 12, "\n")
    return loremIpsum
}

func main() {

    gofakeit.Seed(0)

    fmt.Println("Random Sentence:")
    fmt.Println(generateRandomSentence())

    fmt.Println("\nRandom Paragraph:")
    fmt.Println(generateRandomParagraph())

    fmt.Println("\nLorem Ipsum Text:")
    fmt.Println(generateLoremIpsum())
}

Funktionen `generateRandomSentence` skapar en slumpmässig mening med hjälp av Gofakeits `Sentence`-funktion. Funktionen `generateRandomParagraph` genererar ett slumpmässigt stycke med hjälp av funktionen `Paragraph`.

Funktionen `generateLoremIpsum` skapar ett slumpmässigt lorem ipsum-stycke med hjälp av funktionen `LoremIpsumParagraph`.

I `main`-funktionen anropas `generateRandomSentence`, `generateRandomParagraph` och `generateLoremIpsum`. Programmet skriver sedan ut resultaten i konsolen.

Använd falsk data för att testa din databas

Gofakeit underlättar testning genom dynamisk datagenerering, vilket säkerställer kompatibilitet med olika krav.

Du kan använda Gos inbyggda `database/sql`-paket för att fylla din SQL-databas med testdata. Detta kan hjälpa dig att testa mer avancerade scenarier och förbättra databassäkerheten.

FAQ

F: Hur kan jag dra nytta av denna falska testdata?

Du kan skriva enhetstester och använda falsk testdata för att verifiera att mindre, sammanfogade delar av ditt program fungerar korrekt.

F: Vilka andra testpaket erbjuder Go?

Go har utmärkt inbyggt stöd för testning genom sitt eget testpaket. Detta ger dig möjlighet att jämföra kod, använda fuzzing för att variera dina testdata och organisera dina tester i en hierarki.

F: Vad är ursprunget till Lorem Ipsum?

Lorem ipsum är en vanlig platshållartext som ofta används av utvecklare och designers istället för riktig text. Dess användbarhet ligger i att den uppfattas som falsk samtidigt som den efterliknar riktig text.