ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

使用JavaFaker生成测试数据

2021-05-21 15:58:34  阅读:306  来源: 互联网

标签:JavaFaker String Locale Faker 生成 测试数据 new


之前为了生成大量测试数据写了一些工具。现在发现JavaFaker非常强大,可以生成各种类型数据,包括地址、流行文化等,且支持locale国际化。

本文带你学习JavaFaker,通过示例展示如何使用FakeValueServiceFaker 类,后面再介绍locale,让生成的数据属于特定地域。

1. 加入依赖包

maven依赖如下:

<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>0.15</version>
</dependency>

gradle 依赖:

compile group: 'com.github.javafaker', name: 'javafaker', version: '0.15'

2. FakeValueService

FakeValueService 提供了生成随机序列方法,和yml文件一样,可以关联locale。本节主要介绍其常用方法。

2.1 Letterify, Numerify, and Bothify方法

Letterify, Numberify, 和 Bothify方法很常用。Letterify生成字母序列, Numberify生成数值序列, Bothify生成字母和数值序列,用于生成特定对象标识。实例FakeValueService 需要有效的 Locale和 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* 类,指定英国地区并使用 bothify方法生成唯一Gmail地址。?表示随机字母,#表示随机数字。最后使用Matcher类检查生成结果。

2.2 Regexify方法

类似的,regexify方法基于给定正则表达式生成随机序列。

@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个长度的小写字母或数字组成的序列。

3. JavaFaker的 Faker

Faker类可以使用JavaFaker的虚拟数据。本节我们实例化Faker类并使用它生成虚拟数据:

    @Test
    public void testFaker(){
        Faker faker = new Faker(Locale.CHINA);

        Address addr = faker.address();
        String streetName = addr.streetName();
        String number = addr.buildingNumber();
        String city = addr.city();
        String state = addr.state();

        System.out.println(String.format("%s\t%s\t%s\t%s", number, streetName, city, state));
    }

我们使用Faker的地址对象生成随机地址。运行结果:

5011	姜路	西乡县	广西省

这里指定了locale,因此生成中文地址信息。后面还要说明国际化配置。

类似我们还可以生成其他对象,如:

  • Business
  • Beer
  • Food
  • PhoneNumber

4. 介绍 Locale

这里我们介绍如何使用locale,使得生成的数据位于特定位置。下面定义两个不同地区的Faker:

@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());
}

上面代码生成两个不同地区的邮政编码,如果指定的locale不存在,则 Faker 抛出 ***LocaleDoesNotExistException***异常:

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

5. 唯一性

JavaFaker 可以随机生成数据,但不能保证唯一性。 JavaFaker支持伪随机种子,与RandomService形式一样,使得重复方法调用输出一致:

@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());
}

因此伪随机是一个看似随机但并非随机的过程。上面代码使用相同的种子,生成结果一样。

6. 总结

本文介绍了JavaFaker 生成虚拟数据。主要介绍其中 Faker 类 和 FakeValueService 类;同时也说明如何使用 locale 生成特定区域数据。

标签:JavaFaker,String,Locale,Faker,生成,测试数据,new
来源: https://blog.csdn.net/neweastsun/article/details/117124583

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有