Apex - Prueba
Las pruebas son la parte integrada de Apex o cualquier otro desarrollo de aplicaciones. En Apex, tenemos clases de prueba separadas para desarrollar para todas las pruebas unitarias.
Clases de prueba
En SFDC, el código debe tener una cobertura de código del 75% para poder implementarse en Producción. Esta cobertura de código la realizan las clases de prueba. Las clases de prueba son los fragmentos de código que prueban la funcionalidad de otras clases de Apex.
Escribamos una clase de prueba para uno de nuestros códigos que hemos escrito previamente. Escribiremos la clase de prueba para cubrir nuestro código de clase Trigger y Helper. A continuación se muestra la clase de activación y ayuda que debe cubrirse.
// 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
}
}
Crear clase de prueba
En esta sección, entenderemos cómo crear una clase de prueba.
Creación de datos
Necesitamos crear datos para la clase de prueba en nuestra propia clase de prueba. La clase de prueba de forma predeterminada no tiene acceso a los datos de la organización, pero si configura @isTest (seeAllData = true), entonces también tendrá acceso a los datos de la organización.
@isTest anotación
Al usar esta anotación, declaró que se trata de una clase de prueba y que no se contará en el límite de código total de la organización.
testMethod palabra clave
Los métodos de prueba unitaria son los métodos que no toman argumentos, no envían datos a la base de datos, no envían correos electrónicos y se declaran con la palabra clave testMethod o la anotación isTest en la definición del método. Además, los métodos de prueba deben definirse en clases de prueba, es decir, clases anotadas con isTest.
Hemos utilizado el método de prueba 'myUnitTest' en nuestros ejemplos.
Test.startTest () y Test.stopTest ()
Estos son los métodos de prueba estándar que están disponibles para las clases de prueba. Estos métodos contienen el evento o la acción para la cual estaremos simulando nuestra prueba. Como en este ejemplo, probaremos nuestra clase de disparador y ayudante para simular el disparador de fuego actualizando los registros como lo hemos hecho para iniciar y detener el bloque. Esto también proporciona un límite de gobernador separado para el código que está en el bloque de inicio y parada.
System.assert ()
Este método verifica la salida deseada con la real. En este caso, esperamos que se inserte un registro de factura, por lo que agregamos aserción para verificar lo mismo.
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
}
}
Ejecutando la clase de prueba
Siga los pasos que se indican a continuación para ejecutar la clase de prueba:
Step 1 - Vaya a las clases de Apex ⇒ haga clic en el nombre de la clase 'CustomerTriggerTestClass'.
Step 2 - Haga clic en el botón Ejecutar prueba como se muestra.
Step 3 - Verificar estado
Step 4 - Ahora verifique la clase y el disparador para los que hemos escrito la prueba.
Clase
Desencadenar
Nuestras pruebas son exitosas y completadas.