0
点赞
收藏
分享

微信扫一扫

不一样的虚假(Bogus)和骗子(Faker)

求索大伟 2022-02-04 阅读 78

  首先声明,Bogus是一个Nuget包的名称,Faker是它内部的一个类,这个库的作用就是模拟生成实体类的数据,特别适合测试时的场景,不用苦思冥想,辛辛苦苦来造不同的实体类了。当然,造出来的都是虚假的(Bogus),骗人的(Faker)。它家在这里:https://github.com/bchavez/Bogus

  假如我有个会员类

enum Sex
{
男,

}
class Memmber
{
public Guid ID { get; set; }
public long NO { get; set; }
public string Name { get; set; }
public Sex Sex { get; set; }
public int Age { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
public decimal Balance { get; set; }
public DateTime CreateOn { get; set; }
}

  这个类在测试时,要手动实例化,穿梭于各个层和方法中间,现在把构建这个类的对象(实例),交给Bogus。

  首先引入Bogus包

Install-Package Bogus

  接下来就可以告诉Faker怎么来“骗人”了

var options = new JsonSerializerOptions();
options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(UnicodeRanges.All);
while (true)
{
var personFaker = new Faker<Memmber>()
.RuleFor(x => x.ID, x => x.Random.Guid())
.RuleFor(x=>x.NO,x=>x.Random.Long(100000000000,999999999999))
.RuleFor(x => x.Name, x => x.Person.LastName + x.Person.FirstName)
.RuleFor(x => x.Sex, x => x.Random.Enum<Sex>())
.RuleFor(x => x.Email, x => x.Person.Email)
.RuleFor(x => x.Phone, x => x.Person.Phone)
.RuleFor(x => x.Age, x => x.Random.Int(0, 120))
.RuleFor(x=>x.Balance,x=>x.Finance.Amount(0,1000))
.RuleFor(x => x.CreateOn, x => x.Date.Past(1));

Console.WriteLine(JsonSerializer.Serialize(personFaker.Generate(), options));
Console.ReadLine();
}

看一下效果:

{
"ID":"5f3d97f6-52da-7fb6-e73f-153fd3a41bfb",
"NO":539140308276,
"Name":"KoeppErick",
"Sex":0,
"Age":48,
"Email":"Erick.Koepp@hotmail.com",
"Phone":"(899) 392-6546",
"Balance":45.34,
"CreateOn":"2021-02-14T13:32:19.892062+09:00"
}

看来,Faker是通过RuleFor来给每个属性来模拟那种格式的数据的,比如RuleFor(x => x.Email, x => x.Person.Email),告诉Faker,这是一个Email格式,记得骗人的时候,给人家一个email格式的数据,内容随便你,那问题来了,是不是有一大组格式呢?当然,这也是这个库的作用,都有哪些?

Bogus API Support

  • Address
  • ZipCode​ - Get a zipcode.
  • City​ - Get a city name.
  • StreetAddress​ - Get a street address.
  • CityPrefix​ - Get a city prefix.
  • CitySuffix​ - Get a city suffix.
  • StreetName​ - Get a street name.
  • BuildingNumber​ - Get a building number.
  • StreetSuffix​ - Get a street suffix.
  • SecondaryAddress​ - Get a secondary address like 'Apt. 2' or 'Suite 321'.
  • County​ - Get a county.
  • Country​ - Get a country.
  • FullAddress​ - Get a full address like Street, City, Country.
  • CountryCode​ - Get a random ISO 3166-1 country code.
  • State​ - Get a random state state.
  • StateAbbr​ - Get a state abbreviation.
  • Latitude​ - Get a Latitude.
  • Longitude​ - Get a Longitude.
  • Direction​ - Generates a cardinal or ordinal direction. IE: Northwest, South, SW, E.
  • CardinalDirection​ - Generates a cardinal direction. IE: North, South, E, W.
  • OrdinalDirection​ - Generates an ordinal direction. IE: Northwest, Southeast, SW, NE.
  • Commerce
  • Department​ - Get a random commerce department.

  • Price​ - Get a random product price.

  • Categories​ - Get random product categories.

  • ProductName​ - Get a random product name.

  • Color​ - Get a random color.

  • Product​ - Get a random product.

  • ProductAdjective​ - Random product adjective.

  • ProductMaterial​ - Random product material.

  • Ean8​ - Get a random EAN-8 barcode number.

  • Ean13​ - Get a random EAN-13 barcode number.

  • Company

  • CompanySuffix​ - Get a company suffix. "Inc" and "LLC" etc.

  • CompanyName​ - Get a company name.

  • CatchPhrase​ - Get a company catch phrase.

  • Bs​ - Get a company BS phrase.

  • Database

  • Column​ - Generates a column name.

  • Type​ - Generates a column type.

  • Collation​ - Generates a collation.

  • Engine​ - Generates a storage engine.

  • Date

  • Past​ - Get a DateTime​ in the past between refDate and yearsToGoBack.

  • PastOffset​ - Get a DateTimeOffset​ in the past between refDate and yearsToGoBack.

  • Soon​ - Get a DateTime​ that will happen soon.

  • SoonOffset​ - Get a DateTimeOffset​ that will happen soon.

  • Future​ - Get a DateTime​ in the future between refDate and yearsToGoForward.

  • FutureOffset​ - Get a DateTimeOffset​ in the future between refDate and yearsToGoForward.

  • Between​ - Get a random DateTime​ between start and end.

  • BetweenOffset​ - Get a random DateTimeOffset​ between start and end.

  • Recent​ - Get a random DateTime​ within the last few days.

  • RecentOffset​ - Get a random DateTimeOffset​ within the last few days.

  • Timespan​ - Get a random TimeSpan.

  • Month​ - Get a random month

  • Weekday​ - Get a random weekday

  • Finance

  • Account​ - Get an account number. Default length is 8 digits.

  • AccountName​ - Get an account name. Like "savings", "checking", "Home Loan" etc..

  • Amount​ - Get a random amount. Default 0 - 1000.

  • TransactionType​ - Get a transaction type: "deposit", "withdrawal", "payment", or "invoice".

  • Currency​ - Get a random currency.

  • CreditCardNumber​ - Generate a random credit card number with valid Luhn checksum.

  • CreditCardCvv​ - Generate a credit card CVV

  • BitcoinAddress​ - Generates a random Bitcoin address.

  • EthereumAddress​ - Generate a random Ethereum address.

  • RoutingNumber​ - Generates an ABA routing number with valid check digit.

  • Bic​ - Generates Bank Identifier Code (BIC) code.

  • Iban​ - Generates an International Bank Account Number (IBAN).

  • Hacker

  • Abbreviation​ - Returns an abbreviation.

  • Adjective​ - Returns a adjective.

  • Noun​ - Returns a noun.

  • Verb​ - Returns a verb.

  • IngVerb​ - Returns a verb ending with -ing.

  • Phrase​ - Returns a phrase.

  • Images

  • Abstract​ - Gets an abstract looking image.

  • Animals​ - Gets an image of an animal.

  • Business​ - Gets a business looking image.

  • Cats​ - Gets a picture of a cat.

  • City​ - Gets a city looking image.

  • Food​ - Gets an image of food.

  • Nightlife​ - Gets an image with city looking nightlife.

  • Fashion​ - Gets an image in the fashion category.

  • People​ - Gets an image of humans.

  • Nature​ - Gets an image of nature.

  • Sports​ - Gets an image related to sports.

  • Technics​ - Get a technology related image.

  • Transport​ - Get a transportation related image.

  • DataUri​ - Get a SVG data URI image with a specific width and height.

  • PicsumUrl​ - Get an image from the https://picsum.photos service.

  • PlaceholderUrl​ - Get an image from https://placeholder.com service.

  • LoremFlickrUrl​ - Get an image from https://loremflickr.com service.

  • LoremPixelUrl​ - Creates an image URL with http://lorempixel.com. Note: This service is slow. Consider using PicsumUrl() as a faster alternative.

  • Internet

  • Avatar​ - Generates a legit Internet URL avatar from twitter accounts.

  • Email​ - Generates an email address.

  • ExampleEmail​ - Generates an example email with @example.com.

  • UserName​ - Generates user names.

  • UserNameUnicode​ - Generates a user name preserving Unicode characters.

  • DomainName​ - Generates a random domain name.

  • DomainWord​ - Generates a domain word used for domain names.

  • DomainSuffix​ - Generates a domain name suffix like .com, .net, .org

  • Ip​ - Gets a random IPv4 address string.

  • Port​ - Generates a random port number.

  • IpAddress​ - Gets a random IPv4 IPAddress type.

  • IpEndPoint​ - Gets a random IPv4 IPEndPoint.

  • Ipv6​ - Generates a random IPv6 address string.

  • Ipv6Address​ - Generate a random IPv6 IPAddress type.

  • Ipv6EndPoint​ - Gets a random IPv6 IPEndPoint.

  • UserAgent​ - Generates a random user agent.

  • Mac​ - Gets a random mac address.

  • Password​ - Generates a random password.

  • Color​ - Gets a random aesthetically pleasing color near the base RGB. See here.

  • Protocol​ - Returns a random protocol. HTTP or HTTPS.

  • Url​ - Generates a random URL.

  • UrlWithPath​ - Get an absolute URL with random path.

  • UrlRootedPath​ - Get a rooted URL path like: /foo/bar. Optionally with file extension.

  • Lorem

  • Word​ - Get a random lorem word.

  • Words​ - Get an array of random lorem words.

  • Letter​ - Get a character letter.

  • Sentence​ - Get a random sentence of specific number of words.

  • Sentences​ - Get some sentences.

  • Paragraph​ - Get a paragraph.

  • Paragraphs​ - Get a specified number of paragraphs.

  • Text​ - Get random text on a random lorem methods.

  • Lines​ - Get lines of lorem.

  • Slug​ - Slugify lorem words.

  • Name

  • FirstName​ - Get a first name. Getting a gender specific name is only supported on locales that support it.

  • LastName​ - Get a last name. Getting a gender specific name is only supported on locales that support it.

  • FullName​ - Get a full name, concatenation of calling FirstName and LastName.

  • Prefix​ - Gets a random prefix for a name.

  • Suffix​ - Gets a random suffix for a name.

  • FindName​ - Gets a full name.

  • JobTitle​ - Gets a random job title.

  • JobDescriptor​ - Get a job description.

  • JobArea​ - Get a job area expertise.

  • JobType​ - Get a type of job.

  • Phone

  • PhoneNumber​ - Get a phone number.

  • PhoneNumberFormat​ - Gets a phone number based on the locale's phone_number.formats[] array index.

  • Rant

  • Review​ - Generates a random user review.

  • Reviews​ - Generate an array of random reviews.

  • System

  • FileName​ - Get a random file name.

  • DirectoryPath​ - Get a random directory path (Unix).

  • FilePath​ - Get a random file path (Unix).

  • CommonFileName​ - Generates a random file name with a common file extension.

  • MimeType​ - Get a random mime type

  • CommonFileType​ - Returns a commonly used file type.

  • CommonFileExt​ - Returns a commonly used file extension.

  • FileType​ - Returns any file type available as mime-type.

  • FileExt​ - Gets a random extension for the given mime type.

  • Semver​ - Get a random semver version string.

  • Version​ - Get a random Version.

  • Exception​ - Get a random Exception​ with a fake stack trace.

  • AndroidId​ - Get a random GCM registration ID.

  • ApplePushToken​ - Get a random Apple Push Token

  • BlackBerryPin​ - Get a random BlackBerry Device PIN

  • Vehicle

  • Vin​ - Generate a vehicle identification number (VIN).

  • Manufacturer​ - Get a vehicle manufacture name. IE: Toyota, Ford, Porsche.

  • Model​ - Get a vehicle model. IE: Camry, Civic, Accord.

  • Type​ - Get a vehicle type. IE: Minivan, SUV, Sedan.

  • Fuel​ - Get a vehicle fuel type. IE: Electric, Gasoline, Diesel.

  • Random/Randomizer

  • Number​ - Get an int from 0 to max.

  • Digits​ - Get a random sequence of digits.

  • Even​ - Returns a random even number.

  • Odd​ - Returns a random odd number.

  • Double​ - Get a random double, between 0.0 and 1.0.

  • Decimal​ - Get a random decimal, between 0.0 and 1.0.

  • Float​ - Get a random float, between 0.0 and 1.0.

  • Byte​ - Generate a random byte between 0 and 255.

  • Bytes​ - Get a random sequence of bytes.

  • SByte​ - Generate a random sbyte between -128 and 127.

  • Int​ - Generate a random int between MinValue and MaxValue.

  • UInt​ - Generate a random uint between MinValue and MaxValue.

  • ULong​ - Generate a random ulong between -128 and 127.

  • Long​ - Generate a random long between MinValue and MaxValue.

  • Short​ - Generate a random short between MinValue and MaxValue.

  • UShort​ - Generate a random ushort between MinValue and MaxValue.

  • Char​ - Generate a random char between MinValue and MaxValue.

  • Chars​ - Generate a random chars between MinValue and MaxValue.

  • String​ - Get a string of characters of a specific length.

  • String2​ - Get a string of characters with a specific length drawing characters from chars.

  • Hash​ - Return a random hex hash. Default 40 characters, aka SHA-1.

  • Bool​ - Get a random boolean.

  • ArrayElement<T>​ - Get a random array element.

  • ArrayElement​ - Get a random array element.

  • ArrayElements<T>​ - Get a random subset of an array.

  • ListItem<T>​ - Get a random list item.

  • ListItems<T>​ - Get a random subset of a List.

  • CollectionItem<T>​ - Get a random collection item.

  • ReplaceNumbers​ - Replaces symbols with numbers.

  • ReplaceSymbols​ - Replaces each character instance in a string.

  • Replace​ - Replaces symbols with numbers and letters. # = number, ? = letter, * = number or letter.

  • ClampString​ - Clamps the length of a string between min and max characters.

  • Enum<T>​ - Picks a random Enum of T. Works only with Enums.

  • Shuffle<T>​ - Shuffles an IEnumerable source.

  • Word​ - Returns a single word or phrase in English.

  • Words​ - Gets some random words and phrases in English.

  • WordsArray​ - Get a range of words in an array (English).

  • Guid​ - Get a random GUID.

  • Uuid​ - Get a random GUID. Alias for Randomizer.Guid().

  • RandomLocale​ - Returns a random locale.

  • AlphaNumeric​ - Returns a random set of alpha numeric characters 0-9, a-z.

  • Hexadecimal​ - Generates a random hexadecimal string.

  • WeightedRandom<T>​ - Returns a selection of T[] based on a weighted distribution of probability.

  是不是挺丰富的,一般场景应该够用了,如果有特殊数据模拟,也只能自已动手了。


  对,我是一个祖国的程序员,Member类生成的实例是外国的,这不行,换一下:

var options = new JsonSerializerOptions();
options.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(UnicodeRanges.All);
while (true)
{
var personFaker = new Faker<Memmber>("zh_CN")
.RuleFor(x => x.ID, x => x.Random.Guid())
.RuleFor(x=>x.NO,x=>x.Random.Long(100000000000,999999999999))
.RuleFor(x => x.Name, x => x.Person.LastName + x.Person.FirstName)
.RuleFor(x => x.Sex, x => x.Random.Enum<Sex>())
.RuleFor(x => x.Email, x => x.Person.Email)
.RuleFor(x => x.Phone, x => x.Person.Phone)
.RuleFor(x => x.Age, x => x.Random.Int(0, 120))
.RuleFor(x=>x.Balance,x=>x.Finance.Amount(0,1000))
.RuleFor(x => x.CreateOn, x => x.Date.Past(1));

Console.WriteLine(JsonSerializer.Serialize(personFaker.Generate(), options));
Console.ReadLine();
}

  只需要在new Faker<T>时告这个骗子是要骗祖国的程序,就可以了,看结果吧:

{
"ID":"219d56ca-ea21-3a02-84b5-d9950ae8f384",
"NO":362783628351,
"Name":"徐思远",
"Sex":0,
"Age":100,
"Email":"40@gmail.com",
"Phone":"024-65735687",
"Balance":623.22,
"CreateOn":"2021-01-19T19:38:30.1504231+09:00"
}

其中的名字还真像个真人名,电话号也换成祖国的了。

那还支持其他国家吗?当然

Locale Code

Language


Locale Code

Language

af_ZA

Afrikaans


fr_CH

French  (Switzerland)

ar

Arabic


ge

Georgian

az

Azerbaijani


hr

Hrvatski

cz

Czech


id_ID

Indonesia

de

German


it

Italian

de_AT

German  (Austria)


ja

Japanese

de_CH

German  (Switzerland)


ko

Korean

el

Greek


lv

Latvian

en

English


nb_NO

Norwegian

en_AU

English  (Australia)


ne

Nepalese

en_AU_ocker

English  (Australia Ocker)


nl

Dutch

en_BORK

English (Bork)


nl_BE

Dutch  (Belgium)

en_CA

English  (Canada)


pl

Polish

en_GB

English (Great  Britain)


pt_BR

Portuguese  (Brazil)

en_IE

English  (Ireland)


pt_PT

Portuguese  (Portugal)

en_IND

English  (India)


ro

Romanian

en_NG

Nigeria  (English)


ru

Russian

en_US

English  (United States)


sk

Slovakian

en_ZA

English (South  Africa)


sv

Swedish

es

Spanish


tr

Turkish

es_MX

Spanish  (Mexico)


uk

Ukrainian

fa

Farsi


vi

Vietnamese

fi

Finnish


zh_CN

Chinese

fr

French


zh_TW

Chinese  (Taiwan)

fr_CA

French  (Canada)


zu_ZA

Zulu (South  Africa)


其实还有Bogus有很多其他功能,大家可以自行探索。


  想要更快更方便的了解相关知识,可以关注微信公众号 


不一样的虚假(Bogus)和骗子(Faker)_ico


举报

相关推荐

0 条评论