SOSL Queries in Tests & Testing Best Practices

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

📄 第 454 页 🎬 视频课程

课程章节介绍

好,我们来说说Apex测试里的一些重要规则和最佳实践。你可能已经知道,要部署到生产环境,代码覆盖率至少要达到75%,但这只是最低要求。真正的目标应该是让测试真正验证你的逻辑。 首先,注意一个细节:在测试环境里,SOSL查询默认是返回空结果的。什么意思呢?就是你在测试方法里写了一个SOSL搜索,它不会真的去检索数据,除非你手动给它指定一组固定的结果。要做到这一点,你需要用 `Test.setFixedSearchResults()` 这个方法,提前定义好当你执行SOSL时应该返回哪些记录ID。这样你才能测试搜索相关的逻辑。 接下来,我想强调几条必须养成习惯的最佳实践。 第一,,覆盖所有代码行,——我们刚说了,最低75%,但你要尽量做到100%。而且不仅仅是行覆盖,还要,执行每一个条件分支,。比如 if-else 的分支、循环的不同情况,都要测到。 第二,,用有效输入和无效输入都测一遍,。检查你的代码在正常数据下工作正常,在错误数据或边界情况下能否优雅地处理,而不是崩溃。 第三,,确保测试方法本身不会抛出未处理的异常,。如果你预期会抛出异常,那要在测试里用 try-catch 或 `@isTest` 配合断言来捕获,不能让测试以失败告终,除非你故意验证异常。 第四,,大量使用 `System.assert` 或 `System.assertEquals` 这类断言,。没有断言的测试等于没测,你必须验证代码的行为确实符合预期。 第五,,如果需要模拟特定用户的操作,用 `System.runAs`,。这样你可以测试不同简档和权限下的逻辑,而不用真的切换用户。 第六,,测试触发器或批量逻辑时,使用至少20条记录,。因为Force.com平台有时对少于200条记录的触发会有不同的执行边界,用20条以上能保证批量逻辑被充分验证。把这些记录放在 `Test.startTest()` 之前创建好,然后调用 `startTest()`,之后执行你要测试的代码,最后 `Test.stopTest()`。这样能确保异步处理和调控器限制都按独立上下文运行。 第七,,千万不要在一个测试方法里测试整个应用程序,。每个测试应该聚焦于一个小的功能点或一个类。这样出问题的时候你立刻知道在哪儿。 最后,,保护数据隐私,。测试方法里千万别把真实的个人信息放在错误消息文本里。如果你要抛出异常或是记录调试信息,可以把敏感数据放在自定义异常类的属性里,而不是直接拼进字符串。这样日志或测试结果里就不会暴露隐私数据。 记住这些,你的测试就会更稳健、更安全,也更容易维护。有什么问题,随时可以停下来问我。

关键词

Apex Salesforce Developer Guide