课程章节介绍
同学们,今天我们来聊聊 Apex 测试类里一个很实用的功能,叫做 `@testSetup` 方法。注意这个名字,是 test setup,不是 test set,通常我们叫它“测试设置”方法。
它的作用很简单,就是让你可以在一个地方,一次性创建好测试数据,然后在这个测试类里的每一个测试方法,都能直接访问这些数据。你不用在每个测试方法里反复写那一大堆创建数据的代码了。
那么执行顺序是怎样的呢?测试框架会先自动运行这个标了 `@testSetup` 的方法,把所有需要的记录建好。之后,再去一个个运行你写的那些测试方法。这些测试方法看到的数据,就是初始化时建好的那批,非常干净,而且一模一样。
最重要的是数据隔离。在测试方法里,你可能会修改记录、删掉某些数据,不用担心,每个测试方法对数据做的任何改动,在它运行结束后都会自动回滚。也就是说,下一个测试方法启动时,拿到的还是最初那个 `@testSetup` 方法里创建出来的、原封未动的记录。这保证了测试之间互不干扰。
有几个规矩要记住。第一,一个测试类里,只能有一个方法标上 `@testSetup`,不能多。第二,这个方法里不能用 seeAllData=true,也就是不能直接去查组织中已有的真实数据。第三,如果在 `@testSetup` 方法执行时发生了致命错误,那整个测试类就都不会再继续下去了,所有测试方法都会失败。
还有一个细节,就是静态变量。每个测试方法的执行都是一次新的事务,所以静态变量的值在每个方法开始前都会被清空,重新初始化。你在 `@testSetup` 里给静态变量赋的值,在测试方法里是看不到的。
简单总结一下,`@testSetup` 就像一个提前备好一桌菜的大厨,每一个测试方法就是来吃饭的客人,每个人都能看到同样的菜,而且每个人吃完后都会自动把桌子恢复原样,下一位客人来的时候还是那桌菜。这样我们的测试代码就变得精简、干净,维护起来也轻松多了。
好了,这就是关于 `@testSetup` 方法的讲解,大家可以在自己的代码里实践一下,感受它的便利。
关键词
Apex
Salesforce
Developer Guide