Teste o acionador de evento de alteração

Objetivos de aprendizagem

Após concluir esta unidade, você estará apto a:

  • Escrever uma classe de teste do Apex para o acionador de evento de alteração do Apex.
  • Executar o teste e fornecer cobertura de teste para o acionador de evento de alteração do Apex.

Teste do acionador de evento de modificação

Agora que você aprendeu a escrever um acionador de evento de alteração, vamos escrever um teste para ele. Testar seu acionador é importante não só como uma boa prática, mas também é obrigatório pela plataforma. Antes que você possa empacotar ou implantar acionadores do Apex para produção, você deve fornecer testes do Apex e cobertura de código suficiente. 

É possível fornecer cobertura de teste para o acionador do Apex escrevendo uma classe de teste do Apex, que inclui um ou mais métodos de teste. A estrutura de um método de teste para acionadores de evento de alteração é a seguinte.

@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
    // ...
}

A primeira instrução que você inclui no método de teste é:

Test.enableChangeDataCapture();

Essa instrução habilita todas as entidades para Change Data Capture e assegura que alterações no registro do Salesforce feitas em um método de teste disparem acionadores de evento de alteração. Este método habilita todas as entidades apenas para o teste e não afeta as seleções de entidade de Change Data Capture para a organização.

Após habilitar a Captura de dados de alteração, execute algumas operações DML e chame o método Test.getEventBus().deliver(). O método fornece as mensagens de evento do barramento de evento de teste para o disparo de evento de mudança correspondente e faz com que o acionador seja disparado.

Test.getEventBus().deliver();

As mensagens de eventos de alteração de teste são publicadas no barramento de eventos de teste, que é separado do barramento de eventos do Salesforce. Elas não são persistentes no Salesforce e não são entregues a canais de eventos fora da classe de teste. As propriedades das mensagens de eventos de alteração de teste, como a ID de reprodução, são redefinidas no contexto de teste e refletem apenas os valores de mensagens de evento de teste.

Criar e executar um teste para o acionador

Vamos colocar as mãos à mostra e criar uma classe de teste, TestEmployeeChangeTrigger. O método de teste na classe cria um registro de teste de Empregado e atualiza o registro. Cada uma dessas operações dispara o acionador no evento de alteração de empregado. O teste garante a execução do acionamento, consultando a tarefa que o acionador criou e verificando a contagem de tarefas.

Ao executar a classe de teste no Developer Console, os registro de depuração ficam disponíveis na guia Registros. Para testes de Apex, não há necessidade de configurar registros de depuração em Configuração para a entidade Processo Automatizado.

Para criar a classe de teste:

  1. No Developer Console, selecione Arquivo | Novo | Classe do Apex.
  2. No campo Nome, digite um nome para o acionador: TestEmployeeChangeTrigger.
  3. Substitua o conteúdo padrão pelo código a seguir.
  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. Na janela classe de teste, clique em Executar teste. Após o término da execução do teste, a guia Testes mostra o status da execução do teste.
  6. Clique na guia Testes e expanda o painel Cobertura geral de código. A cobertura de código para o EmployeeChangeTrigger é de 100%, que é o resultado da execução deste teste.

Agora você está pronto para escrever um disparador de evento de mudança com uma classe de teste para que você possa implantá-lo na produção!

Recursos