Using isTest(SeeAllData=True)

DEX455 - Apex 测试完全指南:单元测试、代码覆盖与 Mock 框架

📄 第 447 页 🎬 视频课程

课程章节介绍

同学们,今天我们来看一个在写测试类时非常重要的注解:`@IsTest(SeeAllData=true)`。这个注解啊,就像给测试开了一扇大门,让它可以访问到整个组织里所有已经存在的数据。 通常我们写测试的时候,数据都是隔离的,只能看到测试里自己创建的那些记录。但有时候,你可能会想利用组织中已经存在的一些现成数据进行测试,那就可以用 `SeeAllData=true`。这个注解可以加在整个测试类上,也可以单独加在某个测试方法上。 注意了,它有严格的限制:它只是让你能“看”到真实数据,也就是可以做查询,但是你不能用它来创建、修改或者删除已有的记录。换句话说,即使你看到了这些数据,测试里对它们做的任何更改,在测试结束后都会被自动回滚,不会真的影响到生产数据。所以你放心,它只是读权限,不会留下任何痕迹。 那最佳实践怎么说的呢?这里特别强调,如果要用 `SeeAllData=true`,最好是通过数据筒仓模式来组织测试,也就是把测试划分成不同的数据访问范围,有控制地使用这个权限,不要每处都滥用,否则测试会变得依赖于组织里的具体数据,维护起来很头疼。 另外,注解的作用范围也有讲究。如果测试类上写的是 `@IsTest(SeeAllData=true)`,那类里面所有的方法都会继承这个设置,都能看到真实数据。但是,如果某个具体方法上也加了 `@IsTest(SeeAllData=false)`,那这个方法就会覆盖类的设置,只看懂自己创建的数据。反过来也一样,类默认是false,方法写true就能覆盖成可看真实数据。 还有一个容易踩坑的点:`SeeAllData=true` 不能和 `IsFlow=true` 在同一个方法上同时用。因为它们的运行机制不兼容,所以不要这样组合。 总结一下,这个注解给了测试一种“只读”全局数据的权限,但一定要谨慎使用,确保测试的独立性和可重复性。好了,这个概念很简单但细节很多,大家记住关键点就行。

关键词

Apex Salesforce Developer Guide