课程章节介绍
同学们,今天我们来聊一聊Apex里的集成测试功能,这是一个很实用的工具,能帮我们测试那些需要真正提交数据到数据库、甚至让其他线程看见的场景。
首先,要使用这个功能,你得在临时组织的定义里把“ApexIntegrationTests”这个功能打开,这样集成测试才生效。写测试的时候,把你想要作为集成测试的类或者方法,加上“@IntegrationTest”这个注解就行,很简单。
好,那关键的地方来了。普通的单元测试,数据在测试结束后会自动回滚,但集成测试里,我们会有个叫“commitTestOnly”的方法。你可以在事务的中间调用它,它会立刻把当前已经做的数据变更提交到数据库,这样其他线程或者后续的操作就能看到这些数据了。这样一来,我们就能测到真实的并发场景。
但是,数据提交了就不会自动清理,所以一定得配上“@TearDown”方法。这个方法用来在测试完成之后,手动把你之前提交的那些数据清理干净。如果不清理,下次运行可能会受影响。
说到最佳实践,这儿有几条一定要记住:第一,永远给集成测试配上@TearDown,不然数据越积越多;第二,在清理数据的时候,记得先删子记录,再删父记录,避免因为外键约束删不掉;第三,在调用真实的外部服务之前,最好先调用commitTestOnly把准备数据提交了,因为外部服务可能需要在数据库里看到这些数据;第四,每个测试要聚焦一个点,别写得太复杂;第五,规划好并发,想想多个测试或者多个线程一起跑的时候会不会打架;最后,注意时间限制,集成测试每次运行最多有10分钟,别写得太慢超时了。
这个功能也有些限制,大家要心里有数:它只在Dev预览版的组织里才能抓取使用,不是所有地方都有;另外,集成测试的代码不会算进代码覆盖率里,所以别指望靠它补覆盖率;还有,不支持@TestVisible这个注解;而且目前只支持Deliverc平台,每个组织里只能启用一个集成测试功能;最后,要遵守Deliverc的管理员限制,别超出平台的资源上限。
把这些点记住,你就能安全又有效地使用Apex集成测试,测试那些真正跨事务的场景了。大家有什么问题,随时问我。
关键词
Apex
Salesforce
Developer Guide