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,你可以优化你的测试代码,确保高性能,并维持代码的整洁。
部署到生产环境总是一个关键的步骤,需要注意多个方面来确保部署的成功。以下是部署到Salesforce生产环境时应考虑的主要事项:
在Salesforce中进行部署时,始终确保你已经充分考虑了上述事项,以确保部署的顺利进行并减少任何潜在的风险。