Fermer

janvier 29, 2025

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

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:

L'art de rédiger des cours de test dans la sélection visuelle de Salesforce Apex

  • 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

  1. Isolement: Les classes de test n’affectent pas les données réelles dans votre org. Salesforce fournit un environnement de test séparé.
  2. 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.
  3. 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