Apex - Thử nghiệm

Kiểm tra là phần tích hợp của Apex hoặc bất kỳ phát triển ứng dụng nào khác. Trong Apex, chúng tôi có các lớp thử nghiệm riêng biệt để phát triển cho tất cả thử nghiệm đơn vị.

Lớp kiểm tra

Trong SFDC, mã phải có độ phủ mã 75% để được triển khai cho Sản xuất. Vùng phủ mã này được thực hiện bởi các lớp thử nghiệm. Các lớp kiểm tra là các đoạn mã kiểm tra chức năng của lớp Apex khác.

Hãy để chúng tôi viết một lớp thử nghiệm cho một trong những mã của chúng tôi mà chúng tôi đã viết trước đó. Chúng tôi sẽ viết lớp thử nghiệm để bao gồm mã lớp Trình kích hoạt và Trình trợ giúp của chúng tôi. Dưới đây là lớp trình kích hoạt và trình trợ giúp cần được bao phủ.

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

Tạo lớp kiểm tra

Trong phần này, chúng ta sẽ hiểu cách tạo Lớp kiểm tra.

Tạo dữ liệu

Chúng ta cần tạo dữ liệu cho lớp thử nghiệm trong chính lớp thử nghiệm của chúng ta. Theo mặc định, lớp thử nghiệm không có quyền truy cập vào dữ liệu tổ chức nhưng nếu bạn đặt @isTest (seeAllData = true), thì lớp đó cũng sẽ có quyền truy cập vào dữ liệu của tổ chức.

Chú thích @isTest

Bằng cách sử dụng chú thích này, bạn đã tuyên bố rằng đây là một lớp thử nghiệm và nó sẽ không được tính vào tổng giới hạn mã của tổ chức.

từ khóa testMethod

Các phương pháp kiểm tra đơn vị là các phương pháp không nhận đối số, không cam kết dữ liệu vào cơ sở dữ liệu, không gửi email và được khai báo bằng từ khóa testMethod hoặc chú thích isTest trong định nghĩa phương thức. Ngoài ra, các phương thức kiểm tra phải được xác định trong các lớp kiểm tra, nghĩa là các lớp được chú thích bằng isTest.

Chúng tôi đã sử dụng phương pháp kiểm tra 'myUnitTest' trong các ví dụ của chúng tôi.

Test.startTest () và Test.stopTest ()

Đây là các phương pháp kiểm tra tiêu chuẩn có sẵn cho các lớp kiểm tra. Các phương thức này chứa sự kiện hoặc hành động mà chúng tôi sẽ mô phỏng thử nghiệm của mình. Giống như trong ví dụ này, chúng tôi sẽ kiểm tra trình kích hoạt và lớp trợ giúp của chúng tôi để mô phỏng trình kích hoạt cháy bằng cách cập nhật các bản ghi như chúng tôi đã thực hiện để bắt đầu và dừng khối. Điều này cũng cung cấp giới hạn thống đốc riêng cho mã nằm trong khối khởi động và khối dừng.

System.assert ()

Phương pháp này kiểm tra đầu ra mong muốn với thực tế. Trong trường hợp này, chúng tôi đang mong đợi một bản ghi Hóa đơn được chèn vào, vì vậy chúng tôi đã thêm xác nhận để kiểm tra như vậy.

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
   }
}

Chạy lớp kiểm tra

Làm theo các bước dưới đây để chạy lớp thử nghiệm -

Step 1 - Vào các lớp Apex ⇒ nhấp vào tên lớp 'CustomerTriggerTestClass'.

Step 2 - Bấm vào nút Run Test như hình.

Step 3 - Kiểm tra trạng thái

Step 4 - Bây giờ kiểm tra lớp và kích hoạt mà chúng tôi đã viết bài kiểm tra

Lớp học

Kích hoạt

Thử nghiệm của chúng tôi thành công và hoàn thành.