Skip to main content
Únase a nosotros en TDX, San Francisco o en Salesforce+ del 5 al 6 de marzo en la conferencia de desarrolladores para la era del agente de la IA. Regístrese ahora.

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)? Comience el reto en un Trailhead Playground en español (LATAM) y utilice las traducciones entre paréntesis para navegar. Copie y pegue solo los valores en inglés, ya que las validaciones del reto dependen de los datos en ese idioma. Si no aprueba el reto en su organización en español (LATAM), recomendamos que (1) cambie la configuración local a Estados Unidos, (2) cambie el idioma a inglés (según estas instrucciones) y, luego, (3) haga clic en el botón “Check Challenge” (Comprobar el reto) nuevamente.

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: TestEmployeeChangeTrigger.
  3. 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.');
    }
}
  1. 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.
  2. 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

Reto práctico

+500 puntos

Prepararse

Completará esta/este unidad en su propia organización de prácticas. Haga clic en Iniciar para empezar a trabajar, o haga clic en el nombre de su organización para seleccionar una diferente.

Su reto

Write a Test Class
Create a test method to provide test coverage for the OpportunityChangeTrigger that you created in the previous unit’s challenge.

Prework: Pass the previous unit’s challenge to create the trigger.
  • Create an Apex test class for your trigger modeled after the example TestEmployeeChangeTrigger code:
    • Class Name: TestOpportunityChangeTrigger
    • Method Name: testCreateAndUpdateOpportunity
  • Copy the body of the test method from the TestEmployeeChangeTrigger example class. You will modify it next.
  • In the test method, keep the first statement: Test.enableChangeDataCapture();
  • Create an opportunity:
    • Name: Sell 100 Widgets
    • StageName: Prospecting
    • CloseDate: Date.today().addMonths(3)
  • Call Test.getEventBus().deliver(); to fire the trigger.
  • Delete the verification section because you don't need to verify the trigger execution yet. You will do so later.
  • Modify the SOQL query to retrieve the StageName field from Opportunity.
    • Opportunity[] oppRecords = [SELECT Id,StageName FROM Opportunity];
    • Opportunity opp = oppRecords[0];
  • Update the stage name to Closed Won.
    • opp.StageName = 'Closed Won';
    • update opp;
  • Call Test.getEventBus().deliver(); to fire the trigger.
  • Query Task records using a SOQL query and verify that one task is returned.
    • Task[] taskList = [SELECT Id,Subject FROM Task];
    • System.assertEquals(1, taskList.size(), 'The change event trigger did not create the expected task.');
  • Run the test class and ensure that it passes and provides 100% coverage for the trigger.
Comparta sus comentarios de Trailhead en la Ayuda de Salesforce.

Nos encantaría saber más sobre su experiencia con Trailhead. Ahora puede acceder al nuevo formulario de comentarios en cualquier momento en el sitio de Ayuda de Salesforce.

Más información Continuar a Compartir comentarios