【Salesforce Apex 教程】5.高级编程技巧③ 测试与部署
2023年09月17日
文章浏览:305

5.3 测试与部署 (参考 Debugging, Testing, and Deploying Apex)


5.3.1 Apex测试类的基本概念 (Basic Concepts of Apex Test Classes)

在Salesforce中,我们不能直接在生产环境中部署未经测试的代码。这是为了确保代码的质量,以及为了防止生产环境中的错误和问题。Apex测试类在这里发挥了至关重要的作用。


为什么要进行测试 (Why Test)?

测试帮助验证你的代码行为如预期,无论在开发过程中还是在生产环境中。它还确保你在对现有功能进行更改时不会意外地引入错误。


@isTest Annotation (测试注解):

在Salesforce中,我们使用@isTest注解来标记一个类或方法作为测试类或测试方法。这样,Salesforce知道不应该将它计入组织中的代码限额。

@isTest
private class MyTestClass {
    // 测试代码...
}

Test Methods (测试方法):

测试方法应当在测试类内部,它们也应当使用@isTest注解或者使用testMethod关键字。

@isTest static void myTestMethod() {
    // 测试逻辑...
}

Test Data (测试数据):

在Apex测试中,为了隔离生产数据和测试数据,测试类并不会默认访问组织中的实际数据。你需要在测试类中创建必要的数据。但你可以使用@isTest(SeeAllData=true)来访问实际数据,尽管这通常不推荐。


System.assert() Methods (断言方法):

为了验证代码行为如预期,我们使用System.assert(), System.assertEquals() 和 System.assertNotEquals()方法。

@isTest static void myTestMethod() {
    Integer a = 5;
    Integer b = 2 + 3;
    System.assertEquals(a, b, 'The values should be equal');
}

Code Coverage (代码覆盖率):

在Salesforce中,你必须确保至少有75%的Apex代码被测试覆盖,才能将代码部署到生产环境。这确保了代码的大部分路径都经过了测试,从而提高了代码质量。


5.3.2 使用@TestSetup准备测试数据 (Using @TestSetup to Prepare Test Data)

在Salesforce测试中,创建和准备测试数据是至关重要的。@TestSetup注解允许你创建一次测试数据,然后在多个测试方法中使用这些数据,这样可以提高测试性能并减少重复的代码。


什么是@TestSetup (What is @TestSetup)?

@TestSetup是一个特殊的方法,它在一个测试类的所有其他测试方法之前运行。你可以在这个方法中插入和设置你的测试数据,然后在后续的测试方法中访问和使用这些数据。


为什么使用@TestSetup (Why use @TestSetup)?

·性能优化: 由于测试数据只需要创建一次,而不是在每个测试方法中重复创建,所以测试执行得更快。

·代码整洁: 减少了在多个测试方法中重复创建相同测试数据的需要。

·数据的一致性: 确保所有测试方法使用的是相同的测试数据。

使用示例 (Example):

@isTest
private class TestClassForAccount {
    
    @TestSetup
    static void setupTestData() {
        Account testAccount = new Account(Name='Salesforcegogogo');
        insert testAccount;
    }
    
    @isTest static void testMethod1() {
        List<Account> accounts = [SELECT Name FROM Account];
        System.assertEquals(1, accounts.size());
        System.assertEquals('Salesforcegogogo', accounts[0].Name);
    }

    // 更多的测试方法...
}

在上述示例中,我们首先使用@TestSetup方法创建了一个新的Account记录。然后,在testMethod1中,我们查询这个Account并验证它是否已成功创建。


注意事项 (Things to Note):

·在使用@TestSetup后,你还需要在每个测试方法中查询你的测试数据,因为测试方法之间是隔离的。

·@TestSetup方法只能在测试类中使用,并且每个测试类只能有一个。

·尽管你在@TestSetup方法中创建了数据,但不要期望它们在不同的测试方法之间保持状态(如字段更新)。每个测试方法执行时都会从原始@TestSetup状态开始。


通过有效使用@TestSetup,你可以优化你的测试代码,确保高性能,并维持代码的整洁。


5.3.3 部署到生产环境的注意事项 (Considerations for Deploying to Production)

部署到生产环境总是一个关键的步骤,需要注意多个方面来确保部署的成功。以下是部署到Salesforce生产环境时应考虑的主要事项:

  1. 代码覆盖率 (Code Coverage):要求 (Requirement): 在生产环境部署新的或更新的Apex代码之前,你必须有至少75%的Apex代码覆盖率。这确保了代码的质量和减少了出现错误的可能性。工具 (Tools): 使用Developer Console或VS Code配合Salesforce CLI检查代码覆盖率。
  2. 部署集 (Deployment Sets):组织 (Organization): 确保你的部署集包含所有相关的组件,例如Apex类、触发器、自定义对象、流程等。验证 (Validation): 在部署之前先验证更改。这不会在生产中应用更改,但会执行所有测试,确保部署不会遇到意外的问题。
  3. 测试 (Testing):生产环境数据 (Production Data): 在沙箱环境中进行测试时,确保你的测试场景涵盖了生产环境可能存在的各种数据条件。考虑所有可能的情况 (Consider All Scenarios): 考虑各种边界条件和异常情况,确保它们在生产环境中都被适当地处理。
  4. 备份 (Backup):在部署之前,备份所有受影响的数据和配置。这样,如果部署出现问题,你可以快速恢复到之前的状态。
  5. 监控 (Monitoring):部署后,密切关注生产环境。使用Setup中的Apex Jobs、Debug Logs等工具来监控代码的执行情况和可能的问题。考虑设置Alerts或Notifications来通知你任何可能的问题或异常。
  6. 回滚策略 (Rollback Strategy):确定一个回滚策略以备部署失败。这可能包括重新部署旧版本的代码或修复生产中的问题。
  7. 用户培训与文档 (User Training & Documentation):如果部署的更改影响了用户的日常操作,确保他们已经接受了培训并理解了这些更改。提供相关的用户文档,使他们能够无障碍地使用新功能或更改。

在Salesforce中进行部署时,始终确保你已经充分考虑了上述事项,以确保部署的顺利进行并减少任何潜在的风险。

关注 收藏