L’art de rédiger des cours de test dans Salesforce Apex / Blogs / Perficient

Imaginez que vous construisez un gratte-ciel. Avant d’autoriser les gens à emménager, vous vous assurez qu’il peut résister aux tremblements de terre, aux vents violents et à d’autres facteurs de stress. De même, lorsque vous vous développez dans Salesforce Apex, vous devez tester votre code pour vous assurer qu’il fonctionne de manière transparente dans tous les scénarios. C’est là que l’art d’écrire des cours de test entre en jeu. Pour les débutants, la compréhension des classes de test ne concerne pas seulement la couverture du code; Il s’agit de qualité et de confiance dans vos applications.
Plongeons dans l’histoire de l’élaboration de classes de tests – une étape à la fois, simplifiant les complexités et répondant à vos questions en cours de route.
Pourquoi les classes de test sont-elles importantes?
Considérez les cours de test comme des vérifications de sécurité pour votre organisation Salesforce. Sans eux, vous pouvez déployer du code qui brise les processus commerciaux critiques. Voici quelques raisons clés pour lesquelles ils sont essentiels:
- Prévention des erreurs: Les classes de test garantissent que votre code se comporte comme prévu, même dans les cas de bord.
- Couverture de code: Salesforce nécessite une couverture de code d’au moins 75% pour déployer Apex vers la production.
- Tests de régression: Ils aident à garantir que les nouveaux changements ne brisent pas les fonctionnalités existantes.
- Amélioration de la confiance: De bonnes classes de test donnent aux développeurs et aux parties prenantes la tranquillité d’esprit.
Maintenant que nous savons pourquoi les classes de test comptent, apprenons à les écrire efficacement.
Passer avec les cours de test
Les bases
Les cours de test dans Salesforce sont écrits en apex et sont annotés avec @isTest
. Ces classes valident le comportement de votre code APEX en simulant différents scénarios. Voici un exemple simple:
@isTest
public class AccountHandlerTest {
@isTest
static void testCreateAccount() {
// Arrange: Set up test data
Account acc = new Account(Name="Test Account");
// Act: Perform the action to test
insert acc;
// Assert: Verify the outcome
Account insertedAcc = [SELECT Id, Name FROM Account WHERE Id = :acc.Id];
System.assertEquals('Test Account', insertedAcc.Name);
}
}
Concepts clés à retenir
- Isolement: Les classes de test n’affectent pas les données réelles dans votre org. Salesforce fournit un environnement de test séparé.
- Création de données: Créez toujours des données de test dans vos classes de test. Ne comptez pas sur les données existantes.
- Affirmation: Utiliser
System.assert
Méthodes pour valider les résultats. Par exemple,System.assertEquals(expected, actual)
s’assure que le code produit le résultat attendu.
Rédaction de classes de test efficaces
1 et 1 Suivez le motif d’addition d’organes
Il s’agit d’une règle d’or dans les tests. Cassez vos méthodes de test en trois sections claires:
- Organiser: Préparez les données et l’environnement.
- Acte: Effectuez l’action que vous souhaitez tester.
- Affirmer: Vérifiez le résultat.
Exemple:
@isTest
static void testCalculateDiscount() {
// Arrange
Opportunity opp = new Opportunity(Name="Test Opp", StageName="Prospecting", CloseDate = Date.today());
insert opp;
// Act
Decimal discount = DiscountCalculator.calculateDiscount(opp.Id);
// Assert
System.assert(discount > 0, 'Discount should be greater than zero.');
}
2 Utilisez Test.StartTest et Test.Setpest
Salesforce limite le nombre de requêtes et d’opérations DML que vous pouvez effectuer dans une seule transaction. Pour vous assurer que vos méthodes de test ne atteignent pas ces limites, utilisez Test.startTest()
et Test.stopTest()
. Cela aide également à tester des méthodes asynchrones comme les appels futurs ou les travaux de lots.
@isTest
static void testFutureMethod() {
// Arrange
Account acc = new Account(Name="Test Account");
insert acc;
// Act
Test.startTest();
MyFutureClass.myFutureMethod(acc.Id);
Test.stopTest();
// Assert
Account updatedAcc = [SELECT Status__c FROM Account WHERE Id = :acc.Id];
System.assertEquals('Processed', updatedAcc.Status__c);
}
3 et 3 Tester les cas positifs, négatifs et de bord
Couvrir tous les scénarios possibles:
- Test positif: Valider le comportement attendu pour les entrées valides.
- Test négatif: Gérer gracieusement les entrées non valides.
- Cas de bord: Test des limites (par exemple, valeurs nulles, listes vides).
4 Utilisez des moqueries pour les callououts
Salesforce n’autorise pas les appels HTTP dans les méthodes de test. Au lieu de cela, utilisez le HttpCalloutMock
interface pour simuler les réponses.
@isTest
static void testCallout() {
Test.setMock(HttpCalloutMock.class, new MockHttpResponseGenerator());
// Act
HttpResponse response = MyCalloutService.makeCallout();
// Assert
System.assertEquals(200, response.getStatusCode());
}
5 Vérifiez les limites du gouverneur
Vous pouvez utiliser Limits
Méthodes dans vos classes de test pour vous assurer que votre code gère efficacement les grands ensembles de données et respecte les limites du gouverneur.
System.assert(Limits.getQueries() < 100, 'Query limit exceeded!');
Questions courantes Répondues
Q1. Combien de classes de test dois-je écrire?
Écrivez suffisamment de classes de test pour couvrir tous vos chemins de code. Chaque méthode et branche de la logique doit être testée.
Q2. Comment puis-je réaliser une couverture de code à 100%?
Bien que la couverture à 100% ne soit pas toujours réaliste, visez à couvrir toutes les branches possibles de votre code. Utilisez des outils comme le développeur Console pour identifier les lignes découvertes.
Q3. Puis-je utiliser de vraies données dans les classes de test?
Non, c’est la meilleure pratique de créer vos propres données de test pour assurer la fiabilité et l’isolement.
Q4. Comment gérer les exceptions dans les méthodes de test?
Utiliser try-catch
Blocs pour valider que les exceptions sont lancées à l’attente.
try {
MyClass.myMethod(null);
System.assert(false, 'Expected an exception but none was thrown.');
} catch (Exception e) {
System.assertEquals('Expected Exception Message', e.getMessage());
}
Emballage
La rédaction de classes de test n’est pas seulement une tâche pour cocher votre liste; C’est un art qui garantit la fiabilité de vos applications Salesforce. Commencez par de petites méthodes claires, couvrez divers scénarios et validez toujours vos résultats. Au fil du temps, vous vous retrouverez à construire des solutions robustes et sans erreur qui résistent à l’épreuve du temps, tout comme un gratte-ciel bien construit.
Codage heureux!
Source link