Apex 测试:单元测试、代码覆盖率与触发器测试

掌握 Apex 测试框架:编写单元测试、达到 75% 代码覆盖率、创建测试数据、测试触发器。本文系统讲解测试类与方法的 @isTest 语法、Arrange-Act-Assert 模式、Test.startTest/stopTest 的 governor limit 隔离、提升覆盖率的策略(正向/负向/批量/边界/分支)、测试套件,以及用 @TestSetup 和测试工具类创建可复用测试数据,写出健壮、可部署的 Apex 代码。...

📅 2026/10/5 ✍️ ponybai 🏷️ salesforce, developer, apex, headless

一、Apex 单元测试入门

slide_2

本单元学习目标:理解 Apex 单元测试框架;说明代码覆盖率要求;编写测试类和方法;创建测试数据并运行测试。测试在 Salesforce 上不是可选项——它是通往生产的必经之路。

Apex 单元测试

slide_3

Apex 单元测试是验证其他代码的代码。为什么要测试:验证预期行为、在部署前捕获回归、满足 Salesforce 的 75% 代码覆盖率要求(生产部署必需)、为其他开发者记录预期行为、让重构更有信心。

关键测试原则:测试在隔离中运行(无 org 数据访问);每个测试方法测试一个场景;测试类用 @isTest 注解;用 Test.startTest()/Test.stopTest() 隔离 governor limits;用 System.assert() 断言预期结果。

测试在 Salesforce 上不是可选项——你的代码没有 75% 覆盖率就无法部署到生产。

代码覆盖率与测试语法

slide_4

代码覆盖率(Code Coverage)是测试执行的 Apex 代码行百分比,最低要求 75%。可在 Developer Console(Tests 标签)、VS Code(运行测试后)、Setup → Apex Test Execution 查看。

测试类语法:@isTest 注解的类(不计入 org 代码限制)、@isTest 注解的 static 测试方法。测试方法遵循 Arrange-Act-Assert 模式:创建测试数据 → 执行被测代码 → 断言预期结果。Test.startTest()/Test.stopTest() 提供全新的 governor limit 上下文。

最常用的断言是 System.assertEquals(期望值, 实际值, 失败消息)——三个参数分别是预期值、实际值和可选的失败说明。

提升代码覆盖率与测试套件

slide_5

提升覆盖率的策略:测试正向用例(合法输入 → 预期输出)、负向用例(非法输入 → 异常)、批量场景(200 条而非 1 条)、边界用例(null、空、边界值)、所有分支(if/else 路径、switch 分支);触发器要测试 insert、update、delete、undelete。

创建并执行测试套件(Test Suite):把相关测试分组,一次性运行。Developer Console → Test → New Suite → 添加测试类 → 运行套件查看合并结果。测试套件用于:部署前验证(全量运行)、特性专项测试(只跑相关)、CI/CD 流水线(自动执行)。覆盖率越高,越有信心。

创建测试数据

slide_6

测试无法访问 org 数据,必须在测试内创建测试数据。三种模式:

  • 方法内直接创建——简单、明确。
  • @TestSetup——类内共享的测试数据。
  • 测试工具类(factory)——可复用的测试数据创建。

测试数据应:最小化(只创建这个测试需要的)、显式(值在测试中写明)、隔离(每个测试各自的数据,互不影响)。

二、测试 Apex 触发器

slide_7

本单元学习测试 Apex 触发器——通过 DML 操作验证触发器行为,并断言预期结果。

为触发器添加并运行单元测试

slide_8

触发器测试模式:① 创建测试数据(会触发触发器的记录)→ ② 执行 DML 操作(insert/update/delete)→ ③ 断言触发器的预期副作用。

测试所有触发器事件:insert(创建记录 → 验证默认值)、update(修改记录 → 验证响应)、delete(删除记录 → 验证阻止或级联)。测试批量:插入 200 条记录,验证全部处理,确保 governor limit 安全。

触发器在 Test.startTest()/Test.stopTest() 内同步运行,所以 DML 之后立即断言就能看到触发器的结果。

三、为 Apex 测试创建测试数据

slide_9

最后一个单元学习创建可复用的测试工具类,在所有测试中一致地生成测试数据。

测试工具类与方法

slide_10

测试工具类(Test Utility Class)是可复用的测试数据工厂。用 @isTest 注解的 public 类,包含静态方法(如 createAccount()、createContacts()),每个方法创建并插入测试记录、返回结果。

好处:集中化测试数据创建、跨测试类一致、简洁(一次方法调用替代多行代码)、可维护(对象新增必填字段时,只需改工厂一处,所有测试受益)。

测试不同条件

slide_11

全面测试要覆盖多种条件:单条记录、批量记录(200 条)、正向用例(合法数据、预期结果)、负向用例(非法数据、预期错误)、边界用例(null 字段、边界值)。

运行类中所有测试方法:Developer Console → Test → Run All,查看合并覆盖率和结果。用 @TestSetup 创建共享数据:每个测试类创建一次、每个测试方法后回滚、供类内所有测试方法使用,比每个测试都创建数据更高效。


文章来源:Trailhead - Apex Testing