📜  Apex-测试

📅  最后修改于: 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),那么它也将有权访问组织的数据。

@isTest批注

通过使用此注释,您声明这是一个测试类,并且不会计入组织的总代码限制。

testMethod关键字

单元测试方法是不带参数,不向数据库提交任何数据,不发送电子邮件且在方法定义中使用testMethod关键字或isTest批注声明的方法。同样,测试方法必须在测试类中定义,即用isTest注释的类。

我们在示例中使用了“ myUnitTest”测试方法。

Test.startTest()和Test.stopTest()

这些是可用于测试类别的标准测试方法。这些方法包含我们将为其模拟测试的事件或操作。像本示例一样,我们将像开始和停止块一样更新记录,以测试触发器和辅助类以模拟触发。这也为启动和停止块中的代码提供了单独的调速器限制。

System.assert()

此方法将实际值与所需的输出进行比较。在这种情况下,我们希望插入发票记录,因此我们添加了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-单击运行测试按钮,如图所示。

Apex测试步骤1

步骤3-检查状态

Apex测试步骤2

步骤4-现在检查我们编写测试的类和触发器

Apex测试步骤3

触发

Apex测试步骤4

我们的测试成功并完成。