精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何采用Java構建逼真的測試數據:開發人員的實踐指南

譯文 精選
開發
本文介紹如何構建一個簡單的API以提供可信的模擬用戶數據,該API非常適合用于測試、演示或用戶界面(UI)原型設計。因此可以摒棄模擬數據,構建逼真的模擬數據。

譯者 | 李睿

審校 | 重樓

在日常開發工作中,無論是后端工程師還是API開發人員,幾乎都會面臨一個共同的需求:如何獲取高質量的模擬數據。

無論是在測試新的API、為了演示填充數據庫,還是讓單元測試用例更加貼近真實場景,都需要借助模擬數據來完成。但問題在于,很多常見的模擬數據顯得過于“生硬”和“重復”——例如反復出現的“John Doe”和“123 Main Street”。這不僅降低了測試的真實性,也在向團隊或客戶演示時影響了整體體驗。

本文將探索DataFaker和EasyRandom這兩個功能強大的Java庫,它們可以輕而易舉地生成大量且逼真的模擬數據。

這并不只是簡單地生成姓名與郵箱,還將演示如何在Spring Boot 3項目中無縫集成它們,并結合二者優勢以發揮最大作用。最終,你將學會如何構建一個可直接返回模擬數據的 REST API。

這并不是紙上談兵,而是配備了真實可用的代碼示例,確保能夠在項目中直接應用。

為什么要生成模擬數據?

開發人員通常面對這樣的現實:人工制作測試數據既耗時又容易出錯。

假設開發人員正在開發一個用戶管理系統。需要測試分頁、過濾、排序和邊緣情況(例如缺失電子郵件或者非常長的姓名)。與其人工編寫100行示例JSON,不如立即自動并即時生成,這不是更好嗎?

優質的模擬數據可以幫助開發人員:

  • 在更真實的場景中驗證其邏輯。
  • 使用“看起來真實”的數據展示原型。
  • 使用可變輸入對API或UI組件進行壓力測試。
  • 自動化單元測試,無需樣板“模擬構建器”。

因此,開發人員不再輸入人工模擬數據,而是讓DataFaker和EasyRandom來完成繁重的工作。

DataFaker:現代化以及改進版的JavaFaker

對于曾經使用過JavaFaker的開發人員來說,DataFaker 是其現代化且得到積極維護的后繼產品。

它專為現代Java 生態(Java 17+)構建,不僅性能優異,更提供了涵蓋姓名、地址、財務信息、公司數據、互聯網數據以及加密密鑰等數百種數據類別,能夠滿足多樣化的測試數據需求。

以下是一個簡單的示例:

Java

import net.datafaker.Faker;

Faker faker = new Faker();
System.out.println(faker.name().fullName());
System.out.println(faker.internet().emailAddress());
System.out.println(faker.address().fullAddress());

在運行之后,將會得到類似這樣的結果:

Plain Text

Matilde Marques
matilde.marques@techmail.com
Rua do Carmo 45, 1200-093 Lisboa

此外,通過其區域設置功能,生成的數據還能根據不同的地區動態調整,實現內容的本地化。

Java

Faker faker = new Faker(new Locale("pt"));

現在,生成的數據已經可以匹配開發人員所使用的語言和所在地區——這無疑為國際化測試帶來了極大便利。  

EasyRandom:超越字段填充的智能對象生成器

與專注于生成逼真字段數據的DataFaker不同,EasyRandom(前身為Random Beans)提供了另一種思路。

當面對包含復雜結構(如實體類或DTO)的Java對象,并希望自動填充隨機但符合規范的數據時,EasyRandom顯得尤為實用。  

可以將其視為一個智能的“對象構建引擎”:它不僅能填充基本類型字段,還能自動處理嵌套對象、集合(如List、Map)等復雜結構,輕松生成完整且結構正確的對象實例。

示例:

Java

import org.jeasy.random.EasyRandom;

EasyRandom easyRandom = new EasyRandom();
Person randomPerson = easyRandom.nextObject(Person.class);

這將創建一個完全填充的Person實例,其中包含隨機字符串、數字,甚至嵌套屬性。

因此,DataFaker提供了真實感(例如,“John Smith, john@smith.com”),EasyRandom提供了對象結構的自動化構建能力(例如填充整個POJO圖)。

最佳實踐是將二者結合使用:讓EasyRandom創建對象,然后使用DataFake更加可信的數據來修飾特定的字段。

DataFaker與EasyRandom的結合:最佳選擇

這就是事情變得有趣的地方。

為此將創建一個小型Spring Boot REST API,它公開用于生成虛擬用戶的端點。每個用戶將有一個id、fullName、email、phone和address。你將使用DataFaker實現真實感,使用EasyRandom實現自動化。項目結構如下:

Plain Text

src/
 ├─ main/java/com/example/fakedata/
 │   ├─ Application.java
 │   ├─ config/
 │   ├─ api/
 │   ├─ controller/
 │   ├─ domain/
 │   ├─ dto/
 │   ├─ service/
 │   └─ mapper/
 └─ resources/
     └─ static/index.html

用戶域分類

為了保持簡潔的原則,使用Lombok來避免樣板代碼:

Java

 @Data
 @Builder
 public class User {
  private String id;
  private String fullName;
  private String email;
  private String phone;
  private String address;
 }

對于API響應,將使用Java記錄(Java record)實現不可變性和可讀性:

Java

public record UserDto(String id, String fullName, String email, String phone, String address) { }

服務:兩個庫相結合

這是項目的核心:

Java

 @Service
 public class DataGenService {

  private final Faker faker = new Faker(Locale.ENGLISH);
  private final EasyRandom easyRandom;

  public DataGenService() {
    EasyRandomParameters params = new EasyRandomParameters()
        .seed(System.currentTimeMillis())
        .stringLengthRange(5, 20);
    this.easyRandom = new EasyRandom(params);
  }

  public User randomUserViaDatafaker() {
    return User.builder()
        .id(UUID.randomUUID().toString())
        .fullName(faker.name().fullName())
        .email(faker.internet().emailAddress())
        .phone(faker.phoneNumber().cellPhone())
2       .address(faker.address().fullAddress())
       .build();
  }

  public User randomUserViaEasyRandom() {
    User u = easyRandom.nextObject(User.class);
    if (u.getId() == null || u.getId().isBlank()) {
      u.setId(UUID.randomUUID().toString());
    }
    u.setFullName(faker.name().fullName());
    u.setEmail(faker.internet().emailAddress());
    return u;
  }

  public List<User> manyUsers(int count, boolean easyRandomMode) {
    return IntStream.range(0, count)
        .mapToObj(i -> easyRandomMode ? randomUserViaEasyRandom() : randomUserViaDatafaker())
        .collect(Collectors.toList());
  }
 }

可以看到上例如何使用DataFaker實現真實感以及使用EasyRandom構建結構。二者的協作,就像默契配合的兩位廚師:一位專注構建菜肴的整體架構與食材搭配,另一位則精心調配風味與細節。最終,它們共同呈現出的是結構完整、細節逼真的高質量數據。

REST控制器

現在,通過REST API來使其具備可訪問性。

Java

 @RestController
 @RequestMapping("/api/users")
 public class UserController {

  private final DataGenService service;

  public UserController(DataGenService service) {
    this.service = service;
  }

  @GetMapping("/{count}")
  public ApiResponse<List<UserDto>> generateUsers(@PathVariable int count,
                                           @RequestParam(defaultValue = "false") boolean easy) {
    List<UserDto> users = service.manyUsers(count, easy)
                                 .stream().map(UserMapper::toDto)
                                 .collect(Collectors.toList());
    return ApiResponse.of(users);
  }
 }

為了使API響應一致,將所有內容包裝在一個帶有時間戳的信封中:

Java

 public record ApiResponse<T>(T data, Instant timestamp) {
  public static <T> ApiResponse<T> of(T data) {
    return new ApiResponse<>(data, Instant.now());
  }
 }

這樣,每個API調用都會返回這樣的數據:

JSON

 {
  "data": [
    {
      "id": "e7b1c37a-8b20-43c1-8ff3-b4aef8d89c3a",
      "fullName": "Lina Cordeiro",
      "email": "lina.cordeiro@example.com",
      "phone": "+351 912 345 678",
      "address": "Rua do Comércio 12, Porto"
    }
  ],
  "timestamp": "2025-10-06T13:02:45.321Z"
 }

這樣處理更加清晰且易于調試。

為什么在響應中添加時間戳?

當在分布式系統中調試請求或當客戶端記錄響應時,在有效負載中直接包含服務器時間戳有助于關聯事件——這是一個具有宏觀效益的微觀細節。

為什么兩個庫結合使用更好?

有人會問,“為什么不單獨使用DataFaker?”這是一個很好的問題:

  • DataFaker在生成逼真數據方面表現出色,但它不擅長自動填充深層次的對象結構。
  • 另一方面,EasyRandom擅長處理復雜的對象圖,但其隨機性往往顯得“過于合成”——例如像“asdlkfj@example.com”這樣缺乏真實感的示例。

將兩者結合,能夠獲得以下優勢:

  • 真實感和自動化的統一
  • 與測試框架及API的無縫集成
  • 通過配置與隨機種子確保數據的一致性

這有點像將隨機單詞生成器與翻譯器結合起來:一個提供了豐富多樣的詞匯,而另一個則將這些詞匯組織成結構完整、意義明確的篇章。

更進一步:Postman、Docker和CI/CD

完整的項目還包括:

  • 用于快速測試的Postman集合
  • 用于容器化的Dockerfile和docker-compose.yml
  • 用于自動化構建和依賴項更新的GitHub Actions CI和Dependabot設置

這使得這個小演示成為一個用于測試和學習的生產級參考項目。

如果正在指導初級開發人員或構建內部工具,這是一個展示清晰架構和可重復數據生成的推薦示例。

代碼庫:github.com/wallaceespindola/fake-data-springboot

使用這一設置的實際想法

  1. 負載測試:生成數千個模擬用戶來填充數據庫。
  2. UI原型設計:用逼真的API數據為前端提供數據。
  3. 演示環境:采用動態樣本用戶填充沙盒環境。
  4. 單元測試:用對DataGenService.randomUserViaDatafaker()的調用替換new User("a","b")。
  5. 數據匿名化:快速采用模擬數據替換敏感的生產數據。

這些都是這種組合發揮重要作用的真實場景。

結束語

讓測試數據從令人乏味的模擬數據,轉變為引人入勝的“真實”演示,其秘訣就在于所選擇的工具。

使用DataFaker和EasyRandom,可以自動化實現該過程——使用現代Java、更少的代碼以及完美組合的庫。不僅可以在構建測試或模擬API時節省時間,還可以提供生動、多樣和逼真的演示。

這一切都構建于開源、輕量的基礎之上,并能輕松融入開發人員熟悉的任何技術堆棧——無論是Spring Boot、Quarkus、Micronaut,還是簡單的控制臺應用程序。

現在是告別模擬數據的時候了,為開發的項目提供個性與真實感的數據,可以讓Java完成這些繁重的工作。

需要了解更多的技術見解?可以查看GitHub代碼庫LinkedIn頁面

原文標題:Building Realistic Test Data in Java: A Hands-On Guide for Developers,作者:Wallace Espindola

責任編輯:龐桂玉 來源: 51CTO技術棧
相關推薦

2024-10-14 08:00:00

零信任開發網絡威脅

2022-06-06 10:30:23

容器鏡像

2009-08-27 12:00:40

ibmdwJava

2022-04-20 10:56:06

JavaJVM參數

2021-12-10 23:48:19

Java開發技術

2023-03-15 07:12:53

企業開發人員提供商

2021-02-19 09:33:01

kubernetesJAVA服務

2025-02-08 11:02:57

2022-05-16 13:58:52

開發區塊鏈Web3

2018-11-26 09:55:07

MySQL誤刪數據數據庫

2023-01-05 14:51:01

測試開發軟件開發

2009-06-22 09:13:55

測試開發人員

2023-01-06 17:18:00

測試開發集成測試

2023-08-14 15:23:37

2013-04-15 10:00:09

程序員

2019-11-27 18:54:07

物聯網數字孿生機器學習

2020-05-11 09:54:33

JavaScript開發技術

2021-10-27 10:43:24

開發技能代碼

2022-02-19 22:44:26

Java開發技術

2009-12-09 10:04:20

ibmdwJavaTwitter
點贊
收藏

51CTO技術棧公眾號

国产欧美精品| 在线免费成人| 91麻豆免费看片| 国产精品国产自产拍高清av水多| 在线观看亚洲大片短视频| 日韩成人精品一区二区三区| 亚洲精品国产无套在线观| 国产视频99| 日韩久久久久久久久久| 你懂的视频一区二区| 日韩国产精品一区| 99re精彩视频| 人人草在线视频| 亚洲天堂福利av| 欧美精品一区二区三区在线看午夜 | 不卡影院一区二区| av毛片在线看| 国产日韩av一区| 成人欧美一区二区三区在线观看 | 亚洲少妇视频| 国产色一区二区| 999热视频| 国产美女www| 中文字幕网址在线| 一区二区三区在线电影| 亚洲欧美日韩一区在线| 人妻精油按摩bd高清中文字幕| 最近高清中文在线字幕在线观看1| 亚洲人成网站精品片在线观看| 欧美精品一区二区三区久久| 懂色av成人一区二区三区| 日日夜夜免费精品视频| 97国产成人精品视频| 日韩三级久久久| 国产一区二区电影在线观看| 亚洲国产精品yw在线观看| 久久精品无码一区二区三区毛片| 成人全视频免费观看在线看| 欧美性猛交xxx| 久久久久久免费看| 羞羞视频在线观看免费| 国产精品久久综合| 日韩av高清| 精品视频一二三| 26uuu欧美| 久99久在线| 日本久久一级片| 成人91在线观看| 国产a一区二区| 丰满肉肉bbwwbbww| 国产91在线观看丝袜| 91久久精品国产91久久性色tv| 国产一区二区在线视频聊天| 免费人成在线不卡| 国产欧美日韩专区发布| 波多野结衣爱爱| 日韩av在线免费观看不卡| 日韩av电影免费观看高清| 久久黄色精品视频| 久久精品五月| 国产精品啪视频| 91在线视频国产| 国产美女精品人人做人人爽| 92看片淫黄大片看国产片| aa视频在线免费观看| 国产高清一区日本| 国产经典一区二区三区| 姝姝窝人体www聚色窝| 91视频精品在这里| 日本一区二区三区四区高清视频| 高清av在线| 亚洲欧美日韩在线| 亚洲国产精品无码观看久久| 55av亚洲| 精品国产乱码久久久久久虫虫漫画| 国产va亚洲va在线va| 国产99在线观看| 色综合一区二区| 色戒在线免费观看| 91夜夜蜜桃臀一区二区三区| 亚洲精品成人久久久| 波多野结衣 在线| 色777狠狠狠综合伊人| 美日韩丰满少妇在线观看| 加勒比av在线播放| 校园激情久久| 91精品在线看| 亚州av在线播放| 国产精品久久久爽爽爽麻豆色哟哟| 日本女人高潮视频| 精精国产xxxx视频在线野外| 欧美三级电影在线观看| 91视频免费入口| 亚洲瘦老头同性70tv| 日韩在线国产精品| 懂色av.com| 青青国产91久久久久久| av在线不卡观看| 狠狠v欧美ⅴ日韩v亚洲v大胸| 国产精品电影一区二区| 欧美 日韩 亚洲 一区| 国产一区一一区高清不卡| 91精品国产综合久久久久久| 国产白袜脚足j棉袜在线观看| 加勒比久久综合| 欧美激情欧美狂野欧美精品| 日韩国产亚洲欧美| 高清在线观看日韩| 亚洲三区在线| 亚洲欧洲美洲av| 日韩免费电影网站| 国产农村妇女精品一区| 日韩香蕉视频| 99精品欧美一区二区三区| 黄色毛片在线观看| 亚洲第一av色| 国产精品久久久久久9999| 国产成人影院| 97精品欧美一区二区三区| 97超碰人人草| 国产清纯白嫩初高生在线观看91 | 欧美最大成人综合网| av在线麻豆| 欧美色中文字幕| free性中国hd国语露脸| 亚洲一级淫片| 国产日韩欧美中文| 成年人在线观看视频| 午夜精品久久久久久久久久久| 日本在线观看视频一区| 日韩1区在线| 国产精品成人v| 国产中文在线视频| 欧美日韩在线一区| 国产精品久久久久久亚洲色| 欧美在线观看天堂一区二区三区| 国产精品视频99| 国产在线视频福利| 色综合一区二区三区| 手机在线成人av| 亚洲精品麻豆| 国产在线精品日韩| 爱福利在线视频| 欧美精品一区二区久久久| 欧美三级 欧美一级| 国产一区二区调教| 超碰成人在线免费观看| 久久久久伊人| zzijzzij亚洲日本成熟少妇| 伊人网av在线| 国产精品视频在线看| 日本美女高潮视频| 久久国产精品成人免费观看的软件| 日韩暖暖在线视频| 成年午夜在线| 欧美男男青年gay1069videost | 欧美孕妇性xxxⅹ精品hd| 精品欧美aⅴ在线网站| 亚洲成人av免费在线观看| 宅男噜噜噜66一区二区| 欧美亚州在线观看| 成人黄色毛片| 久久精品亚洲热| 国产高清免费在线观看| 亚洲综合在线视频| 一级特黄a大片免费| 欧美亚洲一区二区三区| 欧美三日本三级少妇三99| 日韩精品免费观看视频| 色999日韩欧美国产| 国产口爆吞精一区二区| 一区二区三区精品在线观看| 成年人小视频在线观看| 亚洲免费大片| 色视频一区二区三区| 国产高清日韩| 午夜精品福利在线观看| 九色视频在线播放| 正在播放亚洲一区| 国产在线欧美在线| 久久天天做天天爱综合色| 亚洲一级免费观看| 欧美日韩综合| 欧美乱偷一区二区三区在线| 日韩黄色三级| 欧美精品久久一区二区| 精品无吗乱吗av国产爱色| 欧美日本韩国一区| 久久精品欧美一区二区| 国产喂奶挤奶一区二区三区| 中文国产在线观看| 亚洲专区一区| 小泽玛利亚av在线| 国产毛片一区二区三区| 91久久精品一区二区别| 婷婷激情一区| 欧美国产日韩在线| 91网页在线观看| 精品国产乱码久久| 天堂av免费在线观看| 亚洲精品亚洲人成人网在线播放| 欧美 日本 国产| 国产一区在线观看麻豆| 免费看国产曰批40分钟| 久久久国产精品| 日本精品国语自产拍在线观看| 久久精品一级| 国产精品都在这里| 欧美少妇网站| 欧美激情第一页xxx| a√在线中文网新版址在线| 亚洲第一区在线| 国产精品爽爽久久| 色婷婷av一区| 日韩美女视频网站| 亚洲精品视频在线看| www.日本高清视频| 91丨九色porny丨蝌蚪| 欧美日韩一区二区区| 麻豆成人免费电影| aaa毛片在线观看| 99成人在线| www.av91| 久久久久电影| 在线国产99| 精品一二三区| 欧洲一区二区在线| 久久aimee| 99热在线国产| 中文字幕亚洲在线观看| 成人写真福利网| 欧美黄色成人| 国产精品一区二区女厕厕| 亚洲第一会所001| 日韩免费观看在线观看| 都市激情亚洲综合| 国产91精品不卡视频| a天堂资源在线| 国内精品免费午夜毛片| 伊人手机在线| 欧美国产日韩在线| 不卡av免费观看| 久久久久久有精品国产| 欧美性受ⅹ╳╳╳黑人a性爽| 久久偷看各类女兵18女厕嘘嘘| avtt亚洲| 久久精品亚洲国产| huan性巨大欧美| 久久91亚洲精品中文字幕奶水| 久久精品这里只有精品| 国产美女一区| www..com日韩| 亚洲成人原创| 免费不卡av在线| 亚洲高清久久| 搞av.com| 99热精品在线| 欧美三级午夜理伦三级| 久久波多野结衣| 久久影视精品| 国产一区二区在线免费| 国产精品伦一区二区| 国产精品久久久久久超碰| 国产黄色精品| 91精品视频在线看| 日韩中文字幕一区二区高清99| 91系列在线观看| 亚洲啊v在线免费视频| 国产精品乱子乱xxxx| 日韩深夜福利| 日本高清不卡一区二区三| 国产在线日韩精品| 亚洲一卡二卡区| 你懂的网址国产 欧美| 国产色一区二区三区| 国产日韩欧美| av污在线观看| 国产成人综合网| 特级西西人体wwwww| 中文字幕第一区综合| 日本中文字幕免费在线观看| 亚洲二区在线观看| 亚洲成人av影片| 911精品产国品一二三产区| 蜜臀av午夜精品| 国产一区二区三区日韩欧美| 免费a级毛片在线播放| 久久久久久国产| 桃子视频成人app| 99高清视频有精品视频| 九九在线高清精品视频| 激情视频小说图片| 欧美亚洲专区| 黑人无套内谢中国美女| 久久综合国产精品| 国产a免费视频| 91久久国产综合久久| 亚洲成人黄色片| 国产一区二区av| heyzo高清在线| 国产欧美亚洲精品| 美女av一区| 亚洲区成人777777精品| 日韩中文字幕亚洲一区二区va在线| 国产精品igao网网址不卡| 久久久精品人体av艺术| 免费网站看av| 欧美日韩国产免费一区二区 | 国产一区不卡精品| 欧美色图亚洲激情| 一区二区三区高清在线| 国产情侣免费视频| 亚洲国产小视频| 国产不卡在线| 国产精品露脸av在线| 欧美调教在线| 欧美这里只有精品| 九九**精品视频免费播放| 国精产品一区二区三区| 午夜精品久久久久久久99水蜜桃| 国产精品久久久久久久久久久久久久久久久久 | 青青草视频成人| 一区二区三区欧美日韩| 一区二区日韩视频| 一区二区三区四区在线观看视频| 国产在线看片免费视频在线观看| 亚洲精品女av网站| 日韩精品看片| 九九九在线观看视频| 久久嫩草精品久久久久| 国产精品自拍视频一区| 欧美第一区第二区| a毛片在线观看| 91九色蝌蚪国产| 亚洲v在线看| 伊人色在线视频| 亚洲人妖av一区二区| 一区二区三区亚洲视频| 日韩在线观看你懂的| 福利一区在线| 亚洲一区尤物| 美女在线一区二区| 大胸美女被爆操| 欧美色大人视频| 一区二区高清不卡| 国产精品国语对白| 欧美**vk| www日韩在线观看| 日本一区二区免费在线| 涩涩视频在线观看| 日韩中文在线观看| 日韩欧美三区| 日韩精品手机在线观看| 国产精品66部| 日本系列第一页| 日韩精品中文字幕久久臀| 日韩大尺度黄色| 亚洲图片都市激情| 国产福利一区二区三区视频在线| 国产亚洲成人精品| 日韩精品视频在线观看免费| 亚洲欧洲自拍| 一区二区视频在线免费| 韩日精品视频一区| 精品视频一区二区在线观看| 亚洲精品国产免费| 欧美日韩精品免费观看视欧美高清免费大片| 欧洲一区二区在线观看| 精品一区二区久久久| 欧美人妻精品一区二区三区| 亚洲激情国产精品| 日韩制服诱惑| 日韩a级黄色片| 久久亚洲捆绑美女| 一区二区日韩在线观看| 国产+人+亚洲| 成人写真视频| 2018国产精品| 色狠狠一区二区| 中文字幕有码在线观看| 精品国产一区二区三区麻豆免费观看完整版| 男人天堂欧美日韩| 欧美成人777| 亚洲免费成人av电影| 成人综合日日夜夜| 91好吊色国产欧美日韩在线| 国产精品素人一区二区| 丰满少妇高潮在线观看| 国产成人精品一区二区在线| 亚洲精品午夜av福利久久蜜桃| 中文字幕在线视频播放| 欧美日韩亚州综合| 黄视频免费在线看| 伊人久久大香线蕉成人综合网| 成人免费视频免费观看| 在线观看你懂的网站| 久久久久久久网站| 99精品全国免费观看视频软件| 在线播放第一页| 欧美日韩一区成人|