Учебники

Апекс — Тестирование

Тестирование является неотъемлемой частью разработки 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 () и Test.stopTest ()

Это стандартные методы тестирования, доступные для тестовых классов. Эти методы содержат событие или действие, для которого мы будем моделировать наш тест. Как и в этом примере, мы протестируем наш класс триггера и помощника для имитации запуска триггера, обновив записи, как мы это сделали для запуска и остановки блока. Это также обеспечивает отдельное ограничение регулятора для кода, который находится в блоке запуска и остановки.

System.assert ()

Этот метод проверяет желаемый результат с фактическим. В этом случае мы ожидаем, что будет добавлена ​​запись Invoice, поэтому мы добавили 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<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
   }
}

Запуск тестового класса

Следуйте инструкциям ниже, чтобы запустить тестовый класс —

Шаг 1 — Перейдите в классы Apex ⇒ нажмите на название класса ‘CustomerTriggerTestClass’.

Шаг 2 — Нажмите кнопку Run Test, как показано.

Апекс Тестирование Шаг 1

Шаг 3 — Проверьте статус

Апекс Тестирование Шаг 2

Шаг 4 — Теперь проверьте класс и триггер, для которого мы написали тест

Учебный класс

Апекс Тестирование Шаг 3

Спусковой крючок

Апекс Тестирование Шаг 4

Наше тестирование прошло успешно и завершено.