fako

Struct Faker for Go

Github星跟蹤圖

Fako

Circle CI Godoc
Go Report Card

Fako is a library intended to fake Golang structs with fake but coherent data, Fako maps struct field tags and generates fake data accordingly.

We find it useful when writing specs to generate fake database data, hope you too.

Example

This is an example of how Fako works.

import(
  "fmt"
  "github.com/wawandco/fako"
)

type User struct {
    Name     string `fako:"full_name"`
  	Username string `fako:"user_name"`
  	Email    string `fako:"email_address"`//Notice the fako:"email_address" tag
  	Phone    string `fako:"phone"`
  	Password string `fako:"simple_password"`
  	Address  string `fako:"street_address"`
}

func main(){
  var user User
  fako.Fill(&user)

  fmt.Println(&user.Email)
  // This prints something like AnthonyMeyer@Twimbo.biz
  // or another valid email

  var userWithOnlyEmail User
  fako.FillOnly(&userWithOnlyEmail, "Email")
  //This will fill all only the email

  var userWithoutEmail User
  fako.FillExcept(&userWithoutEmail, "Email")
  //This will fill all the fields except the email

}

Fako provides 3 built in functions Fill, FillOnly, and FillExcept, please go to godoc for details.

Fako support most of the fields on the fake library, below you can see a list of the field types you can use.

  • brand
  • character
  • characters
  • city
  • color
  • company
  • continent
  • country
  • credit_card_type
  • currency
  • currency_code
  • digits
  • domain_name
  • domain_zone
  • email_address
  • email_body
  • email_subject
  • female_first_name
  • female_full_name
  • female_full_name_with_prefix
  • female_full_name_with_suffix
  • female_last_name
  • female_patronymic
  • first_name
  • full_name
  • full_name_with_prefix
  • full_name_with_suffix
  • gender
  • gender_abbrev
  • hex_color
  • hex_color_short
  • ip_v4
  • industry
  • job_title
  • language
  • last_name
  • latitude_direction
  • longitude_direction
  • male_first_name
  • male_full_name
  • male_full_name_with_prefix
  • male_full_name_with_suffix
  • male_last_name
  • male_patronymic
  • model
  • month
  • month_short
  • paragraph
  • paragraphs
  • patronymic
  • phone
  • product
  • product_name
  • sentence
  • sentences
  • simple_password
  • state
  • state_abbrev
  • street
  • street_address
  • title
  • top_level_domain
  • user_name
  • week_day
  • week_day_short
  • word
  • words
  • zip

Custom Generators

Fako provides a function called Register to add custom data generators in case you need something that our provided generators cannot cover.

To add a custom generator simply call the Register function as in the following example:

import(
  "fmt"
  "github.com/wawandco/fako"
)

type User struct {
    Name     string `fako:"full_name"`
    Username string `fako:"user_name"`
    Email    string `fako:"email_address"`//Notice the fako:"email_address" tag
    Phone    string `fako:"phone"`
    Password string `fako:"simple_password"`
    Address  string `fako:"street_address"`

    AValue   string `fako:"a_gen"`
}

func main(){
  fako.Register("a_gen", func() string {
    return "My Value"
  })

  var user User
  fako.Fill(&user)
  fmt.Println(user.AValue) //should print My Value
}

When using custom generators please keep the following in mind:

  1. Call Register function before calling Fill and its brothers.
  2. Custom generators override base generators, if you pick the same name as one of the existing generators, we will override the existing generator with yours.

Fuzzing

Sometimes you just want to generate random data inside a struct, for those cases you wont want to fill fako types (yes, we understand that part). Fako provides you a Fuzz function you can use to fuzz your structs with random data that simply matches the struct's field types.

You can use it as in the following example:

import "fako"

type Instance struct {
   Name string
   Number int
}

func main(){
  instance := Instance{}
  fako.Fuzz(&instance) // This fills your instance variable
}

Note, Fuzz function works for the following types string, bool, int, int32, int64, float32, float64. other types like Array or Chan are out of our scope.

Credits

As you may have noticed this is based on fake library, which does all the work to generate data.

Fako is Copyright © 2008-2015 Wawandco SAS. It is free software, and may be redistributed under the terms specified in the LICENSE file.

主要指標

概覽
名稱與所有者wawandco/fako
主編程語言Go
編程語言Go (語言數: 1)
平台
許可證MIT License
所有者活动
創建於2015-11-12 18:06:04
推送於2018-08-28 01:02:51
最后一次提交2018-08-27 20:02:50
發布數0
用户参与
星數345
關注者數8
派生數12
提交數31
已啟用問題?
問題數7
打開的問題數1
拉請求數6
打開的拉請求數0
關閉的拉請求數1
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?