1.概述

JavaFaker是一个库,可用于生成从地址到流行文化引用的大量真实数据。

在本教程中,我们将了解如何使用JavaFaker的类来生成假数据。我们将从介绍骗子类和FakeValueService,然后再介绍位置以使数据更特定于单个位置。

最后,我们将讨论数据的唯一性。为了测试JavaFaker的类,我们将使用正则表达式,您可以阅读更多关于它们的内容金宝搏官网188be在这里

2.依赖关系

下面是单曲依赖我们需要开始使用JavaFaker。

首先,基于maven的项目需要依赖:

<依赖> < groupId > com.github。javafaker 0.15 

对于Gradle用户,你可以添加以下内容到你的build.gradle文件:

编译组:“com.github。' Javafaker ',名称:' Javafaker ',版本:'0.15'

3.FakeValueService

FakeValueService类提供了生成随机序列的方法以及解决.yml语言环境

在本节中,我们将介绍一些有用的方法FakerValueService必须提供。

3.1。Letterify,Numerify,Bothify

三种有用的方法是Letterify,Numberify,BothifyLetterify有助于生成字母字符的随机序列

接下来,Numerify简单地生成数字序列。

最后,Bothify两者的结合是可以的吗创建随机的字母数字序列-用于模拟ID字符串之类的东西。

FakeValueService需要一个有效的语言环境,以及RandomService:

@Test public void whenBothifyCalled_checkPatternMatches() throws Exception {FakeValuesService FakeValuesService = new FakeValuesService(new Locale("en-GB"), new RandomService());String email = fakeValuesService.bothify(“????##@gmail.com”);Matcher emailMatcher = Pattern.compile("\\w{4}\\d{2}@gmail.com").matcher(email);assertTrue (emailMatcher.find ());}

在这个单元测试中,我们创建一个新的FakeValueService区域设置为en -使用bothify方法生成一个唯一的假Gmail地址

它通过替换的吗?”随机字母和“#”用随机数字。然后我们可以用一个简单的匹配器检查。

3.2。Regexify

同样的,regexify根据选择的正则表达式模式生成随机序列

在这个代码片段中,我们将使用FakeValueService在指定的正则表达式后面创建一个随机序列:

@Test public void givenValidService_whenRegexifyCalled_checkPattern() throws Exception {FakeValuesService FakeValuesService = new FakeValuesService(new Locale("en-GB"), new RandomService());String alphaNumericString = fakeValuesService.regexify("[a-z1-9]{10}");Matcher alphaNumericMatcher = Pattern.compile("[a-z1-9]{10}").matcher(alphaNumericString);assertTrue (alphaNumericMatcher.find ());}

我们的代码创建长度为10的小写字母数字字符串。我们的模式根据正则表达式检查生成的字符串。

4.JavaFaker的骗子

骗子允许我们使用JavaFaker的假数据类

在本节中,我们将看到如何实例化骗子对象,并使用它调用一些假数据:

Faker Faker = new Faker();String streetName = faker.address().streetName();String number = faker.address().buildingNumber();String city = faker.address().city();String country = faker.address().country();System.out.println(字符串。format("%s\n%s\n%s ",数字,街道名称,城市,国家));

上面,我们使用骗子地址对象生成一个随机地址

当我们运行这段代码时,我们会得到一个输出示例:

汤加新格兰维尔伯勒戴纳山脉3188号

我们可以看到数据没有单一的地理位置因为我们没有指定区域设置。为了改变这一点,我们将在下一节学习如何使数据与我们的位置更加相关。

我们也可以用这个骗子对象以类似的方式创建与更多对象相关的数据,例如:

  • 业务
  • 啤酒
  • 食物
  • PhoneNumber

你可以找到完整的列表在这里

5.引入地区

在这里,我们将介绍如何使用区域设置使生成的数据更特定于单个位置。我们将介绍一个骗子美国地区和英国地区:

@Test public void givenJavaFakersWithDifferentLocals_thenHeckZipCodesMatchRegex() {Faker ukFaker = new Faker(Locale("en-GB"));Faker usFaker = new Faker(new Locale("en-US"));System.out.println(字符串。format("American zipcode: %s", usFaker.address().zipCode());System.out.println(字符串。格式("英国邮政编码:%s", ukFaker.address().zipCode()));模式ukPattern = Pattern.compile (((Gg) [2] (Rr) 0 (Aa) {2}) | ((([A-Za-z] [0 - 9] {1, 2 })|" + "(([ A-Za-z] [A-Ha-hJ-Yj-y] [0 - 9] {1,2}) | (([A-Za-z] [0 - 9] [A-Za-z]) | ([A-Za-z] [A-Ha-hJ-Yj-y]“+”[0 - 9]? [A-Za-z])))) \ \ s ? [0 - 9] {2} [A-Za-z]) ");Matcher ukMatcher = ukPattern.matcher(ukFaker.address().zipCode());assertTrue (ukMatcher.find ());匹配器usMatcher = Pattern.compile(“^ \ \ d {5} (?: [- \ \] \ \ d{4}) ? $”).matcher (usFaker.address () .zipCode ()); assertTrue(usMatcher.find()); }

上面,我们看到两个的混账使用区域设置匹配国家邮政编码的正则表达式。

如果区域设置传递给骗子不存在的,该怎么办骗子抛出一个LocaleDoesNotExistException

我们将使用以下单元测试来测试它:

@Test(expected = LocaleDoesNotExistException.class) public void givenWrongLocale_whenFakerInitialised_testExceptionThrown() {Faker wrongLocaleFaker = new Faker(Locale("en-seaWorld"));}

6.独特性

虽然JavaFaker看似随机生成数据,但不能保证唯一性

JavaFaker支持它的伪随机数生成器(PRNG)以aRandomService提供重复方法调用的确定性输出。

简单地说,伪随机是一个看似随机但并非随机的过程。

我们可以通过创建两个来了解它是如何工作的的混账用同样的种子:

@Test public void givenJavaFakersWithSameSeed_whenNameCalled_CheckSameName() {Faker faker1 = new Faker(new Random(24));Faker faker2 = new Faker(new Random(24));assertequal (faker1.name () .firstName (), faker2.name () .firstName ());}

上面的代码从两个返回相同的名称不同的混账。

7.结论

在本教程中,我们研究了JavaFaker库生成真实的假数据。我们还介绍了两个有用的类骗子类和FakeValueService类。

我们探讨了如何使用区域设置生成特定于位置的数据。

最后,我们讨论了如何生成的数据看起来只是随机的而且数据的唯一性是无法保证的。

和往常一样,代码片段可以在上面找到GitHub

通用的底部

开始使用Spring 5和Spring Boot 2,通过学习的春天课程:

>>看看这个课程
4评论
最古老的
最新的
内联反馈
查看所有评论
对这篇文章的评论关闭!