MultiversX测试手册Skill mvx_testing_handbook

这个技能提供关于MultiversX区块链平台测试的全面指南,涵盖RustVM单元测试、Mandos集成测试和链模拟器,帮助开发者进行智能合约测试、质量评估和SEO关键词如区块链测试、智能合约开发、测试策略。

链开发 0 次安装 0 次浏览 更新于 3/21/2026

名称: mvx_testing_handbook 描述: 关于mandos(场景)、rust-vm单元测试和链模拟器的指南。

MultiversX测试手册

本技能提供关于MultiversX测试三个层次的专家指导:RustVM单元测试、Mandos集成测试和链模拟。

1. RustVM单元测试

  • 位置:合约文件中的#[cfg(test)]模块或tests/目录。
  • 速度:即时。
  • 范围:内部逻辑、严格数学、私有函数。
  • 模拟:使用multiversx_sc_scenario::imports::*来模拟区块链环境(例如blockchain_mock.set_caller(addr))。

2. Mandos场景(.scen.json

  • 位置scenarios/目录。
  • 要求:“如果是端点,则必须有Mandos测试。”
  • 执行
    • cargo test-gen生成场景的Rust包装器。
    • cargo test运行它们。
  • 关键概念
    • step: setState:初始化账户和余额。
    • step: scCall:执行端点。
    • step: checkState:验证存储是否匹配预期值。

3. 链模拟器(mx-chain-simulator-go

  • 位置:独立的系统测试套件(通常是Go或Python)。
  • 范围:与节点API的交互、复杂的跨分片重组、链下索引。
  • 工具:使用POST /simulator/generate-blocks来强制执行。

4. 覆盖策略

  • 资金流入/流出:需要100%的Mandos覆盖。
  • 视图函数:单元测试覆盖足够。
  • 访问控制:明确的负向测试(预期错误4)用于未经授权的调用。
  • 端点覆盖:每个#[endpoint]必须有至少一个Mandos场景。
  • 可支付端点:每个#[payable]端点必须测试:正确的代币、错误的代币、零金额、未经授权的调用者。
  • 角色控制端点:每个#[only_owner]#[only_role]必须有负向测试(未经授权的调用者→预期错误)。
  • 状态转换:状态转换必须通过Mandos中的checkState验证。

5. 测试质量评分标准

为每个类别评分,然后取平均值得到总体分数。

类别 0-2(差) 3-5(部分) 6-8(好) 9-10(优秀)
单元测试 无测试 部分函数已测试 核心逻辑已覆盖 所有函数 + 边缘情况
Mandos覆盖 无场景 部分端点已覆盖 所有端点已覆盖 所有端点 + 错误路径
访问控制测试 无权限测试 仅所有者测试 所有角色已测试 所有角色 + 负向测试
资金流测试 无支付测试 仅快乐路径 所有支付端点 快乐 + 错误 + 边缘金额
链模拟器 不可用 设置存在,未运行 基本流程已测试 跨分片 + 重组测试

评分公式

  • 起始分5("测试存在并通过"的基线)。
  • 每个被评为好(6-8)的类别加1分。
  • 每个被评为优秀(9-10)的类别加2分。
  • 每个被评为差(0-2)的类别减1分。
  • 如果链模拟器不可用减2分。
  • 上限10分,下限1分。

6. 输出格式

测试质量报告

测试执行:
  cargo test: [通过/失败/跳过计数]
  Mandos场景: [通过/失败计数]
  链模拟器: [可用: 是/否] [可用时的通过/失败]

覆盖评估:
  有Mandos的端点: [N/总数] ([%])
  完全测试的可支付端点: [N/总数]
  访问控制负向测试: [N/总数]
  状态转换检查: [N/总数]

类别分数:
  单元测试: [0-10]
  Mandos覆盖: [0-10]
  访问控制测试: [0-10]
  资金流测试: [0-10]
  链模拟器: [0-10]

总体分数: [1-10]

差距:
- [未测试的端点列表]
- [缺失的负向测试列表]
- [未测试的支付场景列表]

完成标准

测试质量评估在以下情况完成:

  1. 所有测试已执行(cargo test + Mandos)。
  2. 评分标准中的每个类别已评估。
  3. 总体分数已计算。
  4. 差距已记录。