Probar el desencadenador de evento de cambio
Objetivos de aprendizaje
Después de completar esta unidad, podrá:
- Redactar una clase de prueba de Apex para el desencadenador de evento de cambio de Apex.
- Ejecutar la prueba y proporcionar cobertura de prueba para el desencadenador de evento de cambio de Apex.
Probar el desencadenador de evento de cambio
Ahora que obtuvo información acerca de cómo redactar un desencadenador de evento de cambio, redactemos una prueba para ello. Probar su desencadenador es importante no solo como una buena práctica sino que también se aplica por la plataforma. Antes de poder empaquetar o implementar desencadenadores de Apex en el entorno de producción, debe proporcionar pruebas de Apex y suficiente cobertura de código.
Proporciona cobertura de prueba para el desencadenador de Apex redactando una clase de prueba de Apex, que incluye uno o más métodos de prueba. La estructura de una prueba para desencadenadores de evento de cambio tiene el siguiente aspecto.
@isTest static void testChangeEventTrigger() { // Enable all Change Data Capture entities for notifications. Test.enableChangeDataCapture(); // Insert one or more test records // ... // Deliver test change events Test.getEventBus().deliver(); // Verify the change event trigger’s execution // ... }
La primera declaración que incluye en el método de prueba es:
Test.enableChangeDataCapture();
Esta declaración activa todas las entidades para Captura de datos de cambio y garantiza que los cambios de registro de Salesforce realizados en un método de prueba inician desencadenadores de evento de cambio. Este método activa todas las entidades solo para la prueba y no afecta a las selecciones de entidades de Captura de datos de cambio para la organización.
Después de activar Captura de datos de cambio, realice algunas operaciones DML y luego llame al método Test.getEventBus().deliver()
. El método entrega los mensajes de eventos desde el bus de eventos de prueba al desencadenador de eventos de cambio correspondiente y provoca que se active el desencadenador.
Test.getEventBus().deliver();
Los mensajes de eventos de cambio de prueba se publican en el bus de eventos de prueba, que está separado del bus de eventos de Salesforce. No persisten en Salesforce y no se entregan a canales de eventos fuera de la clase de prueba. Las propiedades de mensajes de eventos de cambio de prueba, como el Id. de reproducción, se restablecen en contexto de prueba y solo reflejan los valores de mensajes de evento de prueba.
Crear y ejecutar una prueba para el desencadenador
Realicemos un ejercicio y creamos una clase de prueba, TestEmployeeChangeTrigger. El método de prueba en la clase crea un registro de prueba Empleado y actualiza el registro. Cada una de estas operaciones activa el desencadenador en el evento de cambio Empleado. La prueba garantiza la ejecución del desencadenador consultando la tarea creada y verificando el conteo de tareas.
Cuando ejecute la clase de prueba en Developer Console, los registros de depuración están disponibles en la ficha Logs (Registros). Para pruebas de Apex no hay necesidad de establecer registros de depuración en Configuración para la entidad Proceso automatizado.
Para crear la clase de prueba:
- En Developer Console, seleccione File | New | Apex Class (Archivo | Nuevo | Clase de Apex).
- En el campo Nombre, ingrese un nombre para el desencadenador:
TestEmployeeChangeTrigger
. - Sustituya el código predeterminado por el siguiente código.
@isTest public class TestEmployeeChangeTrigger { @isTest static void testCreateAndUpdateEmployee() { // Enable all Change Data Capture entities for notifications. Test.enableChangeDataCapture(); // Insert an Employee test record insert new Employee__c(Name='e-101', First_Name__c='Astro', Last_Name__c='Test', Tenure__c=1); // Call deliver to fire the trigger and deliver the test change event. Test.getEventBus().deliver(); // VERIFICATIONS // Check that the change event trigger created a task. Task[] taskList = [SELECT Id,Subject FROM Task]; System.assertEquals(1, taskList.size(), 'The change event trigger did not create the expected task.'); // Update employee record Employee__c[] empRecords = [SELECT Id,OwnerId,First_Name__c,Tenure__c FROM Employee__c]; // There is only one test record, so get the first one Employee__c emp = empRecords[0]; // Debug System.debug('Retrieved employee record: ' + emp); // Update one field and empty another emp.First_Name__c = 'Codey'; emp.Tenure__c = null; update emp; // Call deliver to fire the trigger for the update operation. Test.getEventBus().deliver(); // VERIFICATIONS // Check that the change event trigger created a task. // We should have two tasks now, including one from the first trigger invocation. Task[] taskList2 = [SELECT Id,Subject FROM Task]; System.assertEquals(2, taskList2.size(), 'The change event trigger did not create the expected task.'); } }
- En la ventana de clase de prueba, haga clic en Ejecutar prueba. Después de que la prueba termine su ejecución, la ficha Tests (Pruebas) muestra el estado de la ejecución de la prueba.
- Haga clic en la ficha Tests y amplíe el panel Overall Code Coverage (Cobertura de código general). La cobertura de código para DesencadenadorCambioEmpleado está al 100%, que es el resultado de la ejecución de esta prueba.
¡Ahora está preparado para redactar un desencadenador de eventos de cambio con una clase de prueba de modo que pueda implementarlo en producción!