如何利用JavaFaker生成模拟数据
发布时间:2023-03-29 11:00:52 所属栏目:教程 来源:
导读:JavaFaker是一个库,可用于生成从地址到流行文化参考的各种真实数据。在本教程中,我们将研究如何使用JavaFaker的类来生成假数据。我们将首先介绍Faker类和FakeValueService,然后继续介绍区域设置以使数据更特定于单
|
JavaFaker是一个库,可用于生成从地址到流行文化参考的各种真实数据。在本教程中,我们将研究如何使用JavaFaker的类来生成假数据。我们将首先介绍Faker类和FakeValueService,然后继续介绍区域设置以使数据更特定于单个位置。最后,我们将讨论数据的独特性。为了测试 JavaFaker 的类,我们将使用正则表达式,您可以在此处阅读有关它们的更多信息。下面是开始使用JavaFaker所需的单个依赖项。首先,基于 Maven 的项目需要的依赖关系:对于 Gradle 用户,您可以将以下 1. 概述 JavaFaker是一个库,可用于生成从地址到流行文化参考的各种真实数据。 在本教程中,我们将研究如何使用JavaFaker的类来生成假数据。我们将首先介绍Faker类和FakeValueService,然后继续介绍区域设置以使数据更特定于单个位置。 最后,我们将讨论数据的独特性。为了测试 JavaFaker 的类,我们将使用正则表达式,您可以在此处阅读有关它们的更多信息。 2. 依赖关系 下面是开始使用JavaFaker所需的单个依赖项。 首先,基于 Maven 的项目需要的依赖关系: <dependency> <groupId>com.github.javafaker</groupId> <artifactId>javafaker</artifactId> <version>0.15</version> </dependency> 对于 Gradle 用户,您可以将以下内容添加到build.gradle文件中: compile group: 'com.github.javafaker',name: 'javafaker',version: '0.15' 3.假价值服务 FakeValueService类提供了用于生成随机序列以及与区域设置关联的 resolveving.yml文件的方法。 在本节中,我们将介绍FakerValueService必须提供的一些有用方法。 3.1.字母化、数字化和两者化 三种有用的方法是Letterify,Numberify和Bothify。Letterify有助于生成字母字符的随机序列。 接下来,Numerify只是生成数字序列。 最后,Bothify是两者的结合,可以创建随机的字母数字序列 - 对于模拟ID字符串之类的东西很有用。 FakeValueService需要一个有效的语言环境,以及一个随机服务: @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-GB,并使用bothify方法生成一个唯一的假Gmail地址。 它通过替换“?”来工作用随机字母和'#'用随机数。然后,我们可以通过简单的Matcher检查来检查输出是否正确。 3.2. 注册 同样,正则表达式基于所选正则表达式模式生成随机序列。 在此代码段中,我们将使用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的Faker类 Faker类允许我们使用 JavaFaker 的假数据类。 在本节中,我们将了解如何实例化Faker对象并使用它来调用一些假数据: 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(String.format("%s\n%s\n%s\n%s",number,streetName,city,country)); 上面,我们使用Faker 地址对象来生成一个随机地址。 当我们运行此代码时,我们将得到一个输出示例: 3188 Dayna Mountains New Granvilleborough Tonga 我们可以看到数据没有单一的地理位置,因为我们没有指定区域设置。为了改变这一点,我们将在下一节中学习使数据与我们的位置更相关。 5. 介绍语言环境 在这里,我们将介绍如何使用区域设置使生成的数据更特定于单个位置。我们将介绍具有美国区域设置和英国区域设置的伪造者: @Test public void givenJavaFakersWithDifferentLocals_thenHeckZipCodesMatchRegex() { Faker ukFaker = new Faker(new Locale("en-GB")); Faker usFaker = new Faker(new Locale("en-US")); System.out.println(String.format("American zipcode: %s",usFaker.address().zipCode())); System.out.println(String.format("British postcode: %s",ukFaker.address().zipCode())); Pattern ukPattern = Pattern.compile( "([Gg][Ii][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][A-Za-z]{2})"); Matcher ukMatcher = ukPattern.matcher(ukFaker.address().zipCode()); assertTrue(ukMatcher.find()); Matcher usMatcher = Pattern.compile("^\\d{5}(?:[-\\s]\\d{4})?$") .matcher(usFaker.address().zipCode()); assertTrue(usMatcher.find()); } 在上面,我们看到具有区域设置的两个Faker与国家/地区邮政编码的正则表达式匹配。 如果传递给Faker的区域设置不存在,Faker将抛出LocaleDoesNotExistException。 我们将使用以下单元测试对此进行测试: @Test(expected = LocaleDoesNotExistException.class) public void givenWrongLocale_whenFakerInitialised_testExceptionThrown() { Faker wrongLocaleFaker = new Faker(new Locale("en-seaWorld")); } 6. 独特性 虽然JavaFaker看似随机生成数据,但无法保证其唯一性。 JavaFaker支持以RandomService的形式为其伪随机数生成器(PRNG)设定种子,以提供重复方法调用的确定性输出。 简单地说,伪随机性是一个看似随机但不是的过程。 我们可以通过创建两个具有相同种子的Faker来了解其工作原理: @Test public void givenJavaFakersWithSameSeed_whenNameCalled_CheckSameName() { Faker faker1 = new Faker(new Random(24)); Faker faker2 = new Faker(new Random(24)); assertEquals(faker1.name().firstName(),faker2.name().firstName()); } 上面的代码从两个不同的伪造者返回相同的名称。 7. 结论 在本教程中,我们探索了JavaFaker 库来生成真实的假数据。我们还介绍了两个有用的类:Faker类和FakeValueService类。 我们探讨了如何使用区域设置来生成特定于位置的数据。 最后,我们讨论了如何生成的数据看起来只是随机的,并且不能保证数据的唯一性。 像往常一样,代码片段可以在GitHub上找到。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
