目录

Apex - 测试

测试是Apex或任何其他应用程序开发的集成部分。 在Apex中,我们有单独的测试类来开发所有单元测试。

测试类

在SFDC中,代码必须具有75%的代码覆盖率才能部署到Production。 此代码覆盖率由测试类执行。 测试类是测试其他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<apex_customer__c>
      customerList, Map<id, apex_customer__c> oldMapCustomer) {
      List<apex_invoice__c> InvoiceList = new List<apex_invoice__c>();
      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() and Test.stopTest()

这些是可用于测试类的标准测试方法。 这些方法包含我们将模拟测试的事件或操作。 就像在这个例子中一样,我们将测试我们的触发器和辅助类,通过更新记录来模拟触发器,就像我们开始和停止块一样。 这还为启动和停止块中的代码提供单独的调控器限制。

System.assert()

此方法使用实际检查所需的输出。 在这种情况下,我们期望插入一个Invoice记录,因此我们添加了assert来检查相同的内容。

Example

/**
* 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<apex_invoice__c> 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
   }
}

运行测试类

按照下面给出的步骤运行测试类 -

Step 1 - 转到Apex类⇒单击类名“CustomerTriggerTestClass”。

Step 2 - 单击Run Test按钮,如图所示。

Apex测试Step1

Step 3 - 检查状态

Apex测试Step2

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

Class

Apex测试Step3

Trigger

Apex测试Step4

我们的测试成功并完成。

↑回到顶部↑
WIKI教程 @2018