📅  最后修改于: 2020-11-05 03:21:46             🧑  作者: Mango
测试是Apex或任何其他应用程序开发的集成部分。在Apex中,我们为所有单元测试开发了单独的测试类。
在SFDC中,代码必须具有75%的代码覆盖率才能部署到生产环境。此代码覆盖范围由测试类执行。测试类是测试其他Apex类功能的代码段。
让我们为我们之前编写的代码之一编写一个测试类。我们将编写测试类以涵盖我们的Trigger和Helper类代码。以下是需要涵盖的触发器和帮助程序类。
// Trigger with Helper Class
trigger Customer_After_Insert on APEX_Customer__c (after update) {
CustomerTriggerHelper.createInvoiceRecords(Trigger.new, trigger.oldMap);
//Trigger calls the helper class and does not have any code in Trigger
}
// Helper Class:
public class CustomerTriggerHelper {
public static void createInvoiceRecords (List
customerList, Map oldMapCustomer) {
List InvoiceList = new List();
for (APEX_Customer__c objCustomer: customerList) {
if (objCustomer.APEX_Customer_Status__c == 'Active' &&
oldMapCustomer.get(objCustomer.id).APEX_Customer_Status__c == 'Inactive') {
// condition to check the old value and new value
APEX_Invoice__c objInvoice = new APEX_Invoice__c();
objInvoice.APEX_Status__c = 'Pending';
objInvoice.APEX_Customer__c = objCustomer.id;
InvoiceList.add(objInvoice);
}
}
insert InvoiceList; // DML to insert the Invoice List in SFDC
}
}
在本节中,我们将了解如何创建测试类。
我们需要在测试类本身中为测试类创建数据。默认情况下,测试类无权访问组织数据,但是如果您设置@isTest(seeAllData = true),那么它也将有权访问组织的数据。
通过使用此注释,您声明这是一个测试类,并且不会计入组织的总代码限制。
单元测试方法是不带参数,不向数据库提交任何数据,不发送电子邮件且在方法定义中使用testMethod关键字或isTest批注声明的方法。同样,测试方法必须在测试类中定义,即用isTest注释的类。
我们在示例中使用了“ myUnitTest”测试方法。
这些是可用于测试类别的标准测试方法。这些方法包含我们将为其模拟测试的事件或操作。像本示例一样,我们将像开始和停止块一样更新记录,以测试触发器和辅助类以模拟触发。这也为启动和停止块中的代码提供了单独的调速器限制。
此方法将实际值与所需的输出进行比较。在这种情况下,我们希望插入发票记录,因此我们添加了assert来检查该记录。
例
/**
* This class contains unit tests for validating the behavior of Apex classes
* and triggers.
*
* Unit tests are class methods that verify whether a particular piece
* of code is working properly. Unit test methods take no arguments,
* commit no data to the database, and are flagged with the testMethod
* keyword in the method definition.
*
* All test methods in an organization are executed whenever Apex code is deployed
* to a production organization to confirm correctness, ensure code
* coverage, and prevent regressions. All Apex classes are
* required to have at least 75% code coverage in order to be deployed
* to a production organization. In addition, all triggers must have some code coverage.
*
* The @isTest class annotation indicates this class only contains test
* methods. Classes defined with the @isTest annotation do not count against
* the organization size limit for all Apex scripts.
*
* See the Apex Language Reference for more information about Testing and Code Coverage.
*/
@isTest
private class CustomerTriggerTestClass {
static testMethod void myUnitTest() {
//Create Data for Customer Objet
APEX_Customer__c objCust = new APEX_Customer__c();
objCust.Name = 'Test Customer';
objCust.APEX_Customer_Status__c = 'Inactive';
insert objCust;
// Now, our trigger will fire on After update event so update the Records
Test.startTest(); // Starts the scope of test
objCust.APEX_Customer_Status__c = 'Active';
update objCust;
Test.stopTest(); // Ends the scope of test
// Now check if it is giving desired results using system.assert
// Statement.New invoice should be created
List invList = [SELECT Id, APEX_Customer__c FROM
APEX_Invoice__c WHERE APEX_Customer__c = :objCust.id];
system.assertEquals(1,invList.size());
// Check if one record is created in Invoivce sObject
}
}
请按照下面给出的步骤运行测试类-
步骤1-转到Apex类⇒单击类名称“ CustomerTriggerTestClass”。
步骤2-单击运行测试按钮,如图所示。
步骤3-检查状态
步骤4-现在检查我们编写测试的类和触发器
我们的测试成功并完成。