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:
- No Developer Console, selecione Arquivo | Novo | Classe do Apex.
- No campo Nome, digite um nome para o acionador:
TestEmployeeChangeTrigger
. - Substitua o conteúdo padrão pelo código a seguir.
@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.'); } }
- 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.
- 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!