Neste artigo, discutiremos as melhores práticas de teste de classe Apex no Salesforce. O teste de unidade é uma parte essencial do desenvolvimento de software, pois garante que o código esteja funcionando corretamente e atenda aos requisitos esperados. No contexto do Salesforce, o teste de classe Apex é usado para testar a lógica de negócios e garantir que o código Apex esteja funcionando corretamente.
O que testar em Apex?
Antes de discutirmos as melhores práticas de teste de classe Apex, é importante entender o que deve ser testado em Apex. Os testes de unidade em Apex devem cobrir os seguintes componentes:
- Registros individuais: Isso inclui testar se um único registro produz o resultado correto e esperado.
- Registros em massa: Qualquer código Apex, como acionadores, classes ou extensões, pode ser usado para 1 a 200 registros. Portanto, é importante testar não apenas o caso de um único registro, mas também os casos em massa.
- Cenários positivos: Esse tipo de teste de componente espera que o sistema salve um registro sem erros.
- Cenários negativos: Esse tipo de teste de componente espera que o sistema retorne um erro.
- Usuário restrito: Teste se um usuário com acesso restrito aos objetos usados no código vê o comportamento esperado, ou seja, se ele pode executar o código ou receber mensagens de erro.
Melhores práticas de teste de classe Apex
Aqui estão algumas das melhores práticas a serem seguidas ao escrever casos de teste eficazes em Apex:
- Inicie a classe de teste com a anotação
@isTest
: É importante marcar a classe de teste com a anotação@isTest
para indicar que ela é uma classe de teste. - Foco em 90%+ de cobertura de código: Para implantar no ambiente de produção, é necessário ter pelo menos 75% de cobertura de código. No entanto, é recomendável focar em 90% ou mais de cobertura de código para garantir uma cobertura abrangente de todos os casos de uso.
- Um comando
assert
por método: Sempre coloque comandosassert
para testes negativos e positivos. UseSystem.assert(condition, msg)
,System.assertEquals(expected, actual, msg)
eSystem.assertNotEquals(expected, actual, msg)
para verificar as condições esperadas. - Use
@testSetup
para criar registros de teste: Use a anotação@testSetup
para criar registros de teste uma vez em um método e usá-los em todos os métodos de teste na classe de teste. Isso reduzirá a duplicação de código e economizará tempo. - Evite usar IDs codificados: Evite usar IDs codificados em qualquer classe de teste ou classe Apex. Em vez disso, use métodos de criação de registros de teste para obter os IDs necessários.
- Limite de governança: Use
Test.startTest()
para obter um novo conjunto de limites de governança para a fase de execução do teste eTest.stopTest()
para retornar aos limites anteriores. Certifique-se de que a classe de teste esteja testando os limites de governança usando a classeLimits
. - Teste de exceção: Teste as exceções que são capturadas nos métodos de produção, fornecendo os dados de teste que geram a exceção. Verifique o tipo de exceção e a mensagem de erro esperada.
- Exercite a funcionalidade do gatilho em massa: Use pelo menos 200 registros em seus testes para exercitar a funcionalidade do gatilho em massa.
- Como criar dados de teste: Existem várias maneiras de criar dados de teste em testes de classe Apex. Você pode criar dados manualmente para cada teste, carregar dados por meio de um recurso estático CSV, usar
@testSetup
para criar registros de teste ou criar uma classe de fábrica de teste. Escolha a abordagem que melhor se adequa às suas necessidades.
Considerações adicionais
Aqui estão algumas considerações adicionais a serem lembradas ao escrever testes de classe Apex:
- Os dados criados nos métodos de teste de classe não são persistidos no banco de dados, portanto, não é necessário excluí-los manualmente.
- Os testes de classe e métodos de teste não são contados como parte do limite de código do Salesforce.
- Os comandos
System.debug
não são contados como parte do limite de código do Apex. - Use
@isTest
para tornar os métodos privados visíveis dentro das classes de teste. - Os testes de método não podem ser usados para testar chamadas de serviço da web. Use mocks de chamadas de serviço da web para testar essa funcionalidade.
- Não é possível enviar e-mails a partir de métodos de teste.
Conclusão
Neste artigo, discutimos as melhores práticas de teste de classe Apex no Salesforce. É importante seguir essas práticas para garantir que o código Apex esteja funcionando corretamente e atenda aos requisitos esperados. Ao escrever casos de teste eficazes, você pode garantir a qualidade do seu código e evitar problemas futuros.