欢迎加入开源鸿蒙PC社区: https://harmonypc.csdn.net/
欢迎在PC社区平台申请新建项目:https://atomgit.com/OpenHarmonyPCDeveloper
AtomGit 仓库地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_rust_cargo

本文讲解鸿蒙 PC 端 Rust 开发环境搭建,鸿蒙基于 musl 库、强制二进制签名,无法直接使用通用 Linux 编译产物。需借助鸿蒙专属包管理器 Harmonybrew,提供两套编译方案:方案一安装 llvm-gcc-compat,零配置开箱即用;方案二仅安装 ohos-sdk,需手动配置 Cargo 链接器,二者都依托 ohos-sdk 完成自动签名编译。

完整的过程可以参考一下:

【OpenHarmony 鸿蒙 PC + CodeArts IDE 实现 Rust开发完整开发环境搭建指南】


fake 库介绍(Rust)

一、作用说明

fake 是 Rust 专用模拟假数据生成库,用于快速生成各类测试虚拟数据,解决开发、单元测试、Mock 接口造测试数据的需求。
核心能力:

  1. 个人信息:姓名、手机号、身份证、邮箱、地址、生日、用户名、密码
  2. 互联网数据:URL、域名、IP、UUID、随机文本、段落
  3. 业务数据:公司名、职位、商品名称、价格、订单号
  4. 本地化支持:支持中文/英文等多语言假数据
    适用场景:单元测试造批量数据、接口 Mock、数据库测试填充、Demo 演示造样例数据

二、安装命令

cargo add fake --features uuid
cargo add uuid

请添加图片描述

三、Cargo.toml 依赖

[dependencies]
fake = { version = "2.9", features = ["zh_CN"] }

四、完整可运行无报错示例代码

use fake::faker::{
    lorem::raw::Paragraph,
    name::raw::{FirstName, LastName, Name},
    phone_number::raw::PhoneNumber,
    internet::raw::FreeEmail,
};
use fake::locales::ZH_CN;
use fake::{Fake, Faker};
use uuid::Uuid;

fn main() {
    // 中文个人信息
    let full_name: String = Name(ZH_CN).fake();
    let first_name: String = FirstName(ZH_CN).fake();
    let last_name: String = LastName(ZH_CN).fake();
    let phone: String = PhoneNumber(ZH_CN).fake();
    let email: String = FreeEmail(ZH_CN).fake();

    println!("===== 中文个人信息 =====");
    println!("完整姓名:{}", full_name);
    println!("姓:{} 名:{}", last_name, first_name);
    println!("手机号:{}", phone);
    println!("邮箱:{}", email);

    // UUID、IPv4
    let uuid_val: Uuid = Faker.fake();
    let ipv4: std::net::Ipv4Addr = Faker.fake();
    println!("\n===== 网络标识 =====");
    println!("UUID:{}", uuid_val);
    println!("IPv4地址:{}", ipv4);

    // 随机文本段落(必须传区间 Range)
    let para: String = Paragraph(ZH_CN, 2..4).fake();
    println!("\n===== 随机文本 =====");
    println!("段落:{}", para);

    // 随机数字、价格【修复:括号包裹Range再调用.fake()】
    let rand_int: u32 = (1..10000).fake();
    let price: f64 = (10.0..999.99).fake();
    println!("\n===== 数字数据 =====");
    println!("随机整数:{}", rand_int);
    println!("商品价格:{:.2} 元", price);

    // 批量生成5个用户
    println!("\n===== 批量测试用户 =====");
    for i in 1..=5 {
        let uname = Name(ZH_CN).fake::<String>();
        let tel = PhoneNumber(ZH_CN).fake::<String>();
        println!("用户{}:姓名={} 电话={}", i, uname, tel);
    }
}

请添加图片描述


一、先回顾依赖 Cargo.toml

fake = { version = "5.1", features = ["uuid"] }
uuid = "1.8"
  • fake:Rust 假数据生成库,用于造测试模拟数据
  • features = ["uuid"]:开启内置 UUID 随机生成支持
  • uuid:标准 UUID 类型定义库

二、顶部导入语句分段解析

use fake::faker::{
    lorem::raw::Paragraph,
    name::raw::{FirstName, LastName, Name},
    phone_number::raw::PhoneNumber,
    internet::raw::FreeEmail,
};

模块层级说明

fake::faker = 所有假数据生成器的根目录,里面分各类业务模块:

  1. lorem::raw::Paragraph
    生成随机中文段落文本,构造时需要传入语言包+句子数量区间
  2. name::raw::{FirstName, LastName, Name}
    • FirstName:名
    • LastName:姓
    • Name:完整姓名(姓+名)
  3. phone_number::raw::PhoneNumber
    随机手机号/电话号码
  4. internet::raw::FreeEmail
    随机免费邮箱地址(qq/163/gmail 等)

后缀 raw:底层原始生成器结构体,必须搭配地区语言常量(ZH_CN)使用。

use fake::locales::ZH_CN;

locales = 语言地区包
ZH_CN:公开常量,代表简体中文,传给生成器就能输出中文假数据;
如果换成 EN 就是英文数据。

use fake::{Fake, Faker};
  1. Fake trait:核心特征,只要实现该 trait 的类型都能调用 .fake() 生成随机值
  2. Faker:全局默认随机生成器,无参、不需要语言包,生成通用基础类型(数字、IPv4、UUID)
use uuid::Uuid;

标准 UUID 唯一标识类型,用于接收 Faker.fake() 生成的随机唯一ID。


三、main 函数代码逐块拆解

1. 中文个人信息块

let full_name: String = Name(ZH_CN).fake();
let first_name: String = FirstName(ZH_CN).fake();
let last_name: String = LastName(ZH_CN).fake();
let phone: String = PhoneNumber(ZH_CN).fake();
let email: String = FreeEmail(ZH_CN).fake();

语法模板统一规则

生成器结构体(语言包).fake::<返回类型>()

  1. Name(ZH_CN):构造中文姓名生成器实例
  2. .fake():调用 Fake trait 方法,自动生成随机字符串
  3. 类型标注 :String 告诉编译器返回值类型,也可以显式写 .fake::<String>()

作用:一次性生成中文全名、姓氏、名字、手机号、邮箱,多用于用户测试数据。

2. UUID + IPv4 网络标识

let uuid_val: Uuid = Faker.fake();
let ipv4: std::net::Ipv4Addr = Faker.fake();
  • Faker 不需要传语言包,专门生成通用无语言属性的基础类型
  • Uuid:全局唯一标识符,日志、订单、用户ID常用
  • Ipv4Addr:标准 IPv4 地址类型,生成随机内网/公网IP

3. 随机中文段落

let para: String = Paragraph(ZH_CN, 2..4).fake();
  1. Paragraph 段落生成器需要两个参数:语言包 + 句子数量区间
  2. 2..4:Range 区间,表示段落包含 2~4 句中文
  3. 用途:模拟商品描述、评论、文章测试文本

4. 区间随机数字 & 价格(重点语法坑说明)

let rand_int: u32 = (1..10000).fake();
let price: f64 = (10.0..999.99).fake();

关键语法知识点

Rust 运算符优先级:. 高于 ..
如果写成 1..10000.fake(),编译器会理解成 1..(10000.fake()),直接类型报错。
必须用括号包裹完整区间 (起始..结束).fake()

  • (1..10000).fake():生成 1 ~ 9999 的随机无符号整数
  • (10.0..999.99).fake():生成 10 ~ 999.99 的随机浮点数,模拟商品价格

5. 批量循环生成测试用户

for i in 1..=5 {
    let uname = Name(ZH_CN).fake::<String>();
    let tel = PhoneNumber(ZH_CN).fake::<String>();
    println!("用户{}:姓名={} 电话={}", i, uname, tel);
}
  • 1..=5:闭区间循环,循环 1、2、3、4、5 五次
  • .fake::<String>():尖括号显式指定返回类型,等价于变量前标注 :String
  • 业务场景:批量造数据库测试用户、批量Mock接口请求参数

四、整体业务使用场景总结

  1. 单元测试:不用手写固定测试数据,每次自动生成不重复模拟用户
  2. 接口Mock:调试后端接口时,快速构造大量随机入参
  3. 数据库填充:初始化测试库批量插入虚拟用户、订单数据
  4. 演示Demo:页面展示样例数据,避免写死真实信息

五、核心API规律总结

  1. 带语言(中文/英文)的业务数据(姓名、手机号、文本):
    生成器(ZH_CN).fake()
  2. 无语言通用基础类型(IP、UUID、随机数字):
    Faker.fake() / (区间).fake()
  3. 所有生成逻辑都依赖 Fake trait,统一 .fake() 生成随机值
  4. ZH_CN 简体中文常量,fake 5.x 内置无需额外开启feature

补充说明

  1. 特性说明
    • 默认不带地区,生成英文数据;开启 zh_CN 才能输出中文姓名、地址、手机号、身份证;
    • 内置 Fake trait,所有假数据类型都可直接调用 .fake() 快速取值。
  2. 随机种子控制(固定复现测试数据)
use fake::{Fake, StdRng};
use rand::SeedableRng;

fn fixed_seed_demo() {
    // 固定种子,每次运行生成一模一样的数据
    let mut rng = StdRng::seed_from_u64(123456);
    let name: String = zh_CN::Name::Name.fake_with_rng(&mut rng);
    println!("固定种子姓名:{}", name);
}
  1. 常见使用场景简化写法
    任意范围数字、布尔值直接 (min..max).fake(),不用额外导入模块,适合快速造测试参数。

更多推荐