Skip to main content

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.
Nota

Nota

¿Es su idioma de aprendizaje español (LATAM)? En esta insignia, las validaciones de los retos prácticos de Trailhead funcionan en inglés. Entre paréntesis se incluyen las traducciones a modo de referencia. En su instancia de Trailhead Playground, asegúrese de (1) cambiar la configuración local a los Estados Unidos, (2) cambiar el idioma a inglés, y (3) copiar y pegar solo los valores en inglés. Siga las instrucciones que figuran aquí.

Consulte la insignia Trailhead en su idioma para obtener más información sobre cómo aprovechar la experiencia de Trailhead en otros idiomas.

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:

  1. En Developer Console, seleccione File | New | Apex Class (Archivo | Nuevo | Clase de Apex).
  2. En el campo Nombre, ingrese un nombre para el desencadenador: DesencadenadorCambioEmpleadoPrueba.
  3. Sustituya el código predeterminado por el siguiente código.
  4. @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.');
        }
    }
  5. 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.
  6. 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!

Recursos

¡Siga aprendiendo gratis!
Regístrese para obtener una cuenta y continuar.
¿Qué hay para usted?
  • Consiga recomendaciones personalizadas para sus objetivos profesionales
  • Practique sus aptitudes con retos prácticos y pruebas
  • Siga y comparta su progreso con empleadores
  • Póngase en contacto para recibir asesoramiento y oportunidades laborales