课程章节介绍
我们接着聊聊在Apex里怎么测试报表代码。想象一下,你要写个测试,验证某个报表运行后汇总的数据对不对。这思路其实很直接——先准备好数据,再触发报表执行,最后核对结果。
在Salesforce里测试报表,最常用的做法就是先构造一些测试数据,比如新建一个“商机”记录,或者合同、客户这些报表会依赖的对象。我们把这些记录按照报表的筛选条件准确地设好,比如阶段、金额、日期,这样报表跑起来就能抓到它们。你可以把这一步理解为:“亲手把答案填进考卷里”,后面报表算出来的结果我们就知道该是什么了。
然后,接下来是重点——如果你要测的是一个异步报表,也就是用 `runAsyncReport` 方式调用的报表,那么执行的方式有点特殊。在同步测试里,我们必须用 `Test.startTest()` 和 `Test.stopTest()` 这对括号把调用包起来。代码写起来大概是这样:
```apex
Test.startTest();
// 这里触发异步报表运行,例如:Reports.ReportInstance instance = report.runAsync();
Test.stopTest();
```
请注意,当代码执行到 `Test.stopTest()` 的时候,Salesforce才会真正地把那个异步的报表请求执行完成。所以在我们退出 `stopTest` 之前,报表结果其实还没生成好。等 `stopTest` 一过,报表实例就填充好了,我们就可以拿过来检查。
拿过来之后,先看看状态。我们检查 `getStatus()`,它应该返回字符串 `'RST'`,代表报表已经成功完成。如果不是这个状态,那可能是测试环境有问题或者代码哪里没写对。
状态确认没问题了,我们就可以去取报表里的汇总数据。这里有一个小技巧,可以用 `T!T` 这种双字母键来访问“事实地图(Fact Map)”。这个 `T!T` 是一个约定好的键,专门用来提取报表里的总计行。你想象一下,报表像一个表格,最底下有个“总计”行,`T!T` 就是直接找到这一行里的聚合数值。用它获取到总计值之后,你就可以用 `System.assertEquals` 之类的断言,跟我们早先造的数据做比对,验证报表是否准确地把总额、记录数等聚合值计算正确了。
举个例子,你可能在测试里验证某个商机报表的总金额是否等于你创建的两个商机金额之和。这样就形成了一个完整的验证流程:造数据 → 触发报表 → 检查状态 → 核对总计值。
整体上这就是测试异步报表的套路,记住几个关键点:用 `Test.startTest/stopTest` 包裹、在 `stopTest` 之后再去拿实例、检查状态是否为 `'RST'`、再用 `T!T` 取总计进行断言。是不是挺清晰的?下次写测试的时候你完全可以照这个模板来。
关键词
Apex
Salesforce
Developer Guide