Annotations IsTest

Utilisez l'annotation isTest pour définir des classes ou des méthodes individuelles qui contiennent uniquement le code utilisé pour tester votre application. L'annotation isTest est semblable à la création de méthodes déclarées testMethod.
Remarque
Les classes définies avec l'annotation isTest ne sont pas prises en compte dans les limitations de votre organisation de 3 Mo pour l'ensemble du code Apex. Les méthodes de test individuelles dans une classe non annotées avec isTestsont prises en compte dans la limitation de la taille du code de votre organisation. Reportez-vous à Compréhension des limitations et des gouverneurs d'exécution.

À compter du code Apex enregistré en utilisant l'API Salesforce.com version 24.0, les méthodes de test n'ont plus accès par défaut aux données préexistantes dans l'organisation. Néanmoins, le code de test enregistré en utilisant l'API Salesforce.com version 23.0 ou antérieure garde accès à toutes les données de l'organisation et son accès aux données reste inchangé. Reportez-vous à Isolation des données test de celles de l'organisation dans les tests unitaires.

Les classes et les méthodes définies comme isTest peuvent être private ou public. Les classes définies comme isTest doivent être de niveau supérieur.

L'exemple suivant présente une classe de test privé qui contient deux méthodes de test.

@isTest

private class MyTestClass {



   // Methods for testing

   @isTest static void test1() {

      // Implement test code

   }



   @isTest static void test2() {

      // Implement test code

   }



}
L'exemple suivant présente une classe de test public qui contient deux méthodes utilitaires pour la création de données test :
@isTest 

public class TestUtil {



   public static void createTestAccounts() { 

      // Create some test accounts

   }



   public static void createTestContacts() {

      // Create some test contacts

   }



}

Les classes définies comme isTest ne peuvent pas être des interfaces ou des énumérations.

Les méthodes d'une classe de test public peuvent être appelées uniquement à partir d'un test exécuté, c.-à-d. une méthode de test ou un code invoqué par une méthode de test, et ne peuvent pas être appelées par une requête non test. De plus, les méthodes de classe de test peuvent être invoquées en utilisant l'interface utilisateur ou l'API Salesforce. Pour plus d'informations, reportez-vous à Exécution de méthodes de test unitaire.

Annotation IsTest(SeeAllData=true)

Pour un code Apex enregistré en utilisant l'API Salesforce.com versions 24.0 et supérieures, utilisez l'annotation isTest(SeeAllData=true) pour accorder aux classes de test et aux méthodes de test individuelles l'accès à toutes les données de l'organisation, y compris aux données préexistantes que le test n'a pas créées. À compter du code Apex enregistré en utilisant l'API Salesforce.com version 24.0, les méthodes de test n'ont plus accès par défaut aux données préexistantes dans l'organisation. Néanmoins, le code de test enregistré en utilisant l'API Salesforce.com version 23.0 ou antérieure garde accès à toutes les données de l'organisation et son accès aux données reste inchangé. Reportez-vous à Isolation des données test de celles de l'organisation dans les tests unitaires.

Considérations sur l'annotation IsTest(SeeAllData=true)
  • Si une classe de test est définie avec l'annotation isTest(SeeAllData=true), cette annotation s'applique à toutes ses méthodes de test, qu'elles soient définies avec l'annotation @isTest ou le mot clé testmethod.
  • L'annotation isTest(SeeAllData=true) est utilisée pour ouvrir l'accès aux données lorsqu'elle s'applique au niveau de la classe ou de la méthode. Cependant, l'utilisation de isTest(SeeAllData=false) dans une méthode ne limite pas l'accès aux données de l'organisation pour cette méthode si la classe qu'elle contient a déjà été définie avec l'annotation isTest(SeeAllData=true). Dans ce cas, la méthode garde accès à l'ensemble des données de l'organisation.
Cette exemple montre comment définir une classe de test avec l'annotation isTest(SeeAllData=true). Toutes les méthodes de test de cette classe ont accès à l'ensemble des données de l'organisation.
// All test methods in this class can access all data.

@isTest(SeeAllData=true)

public class TestDataAccessClass {



    // This test accesses an existing account. 

    // It also creates and accesses a new test account.

    static testmethod void myTestMethod1() { // Query an existing account in the organization. Account a = [SELECT Id, Name FROM Account WHERE Name='Acme' LIMIT 1]; System.assert(a != null); // Create a test account based on the queried account. Account testAccount = a.clone(); testAccount.Name = 'Acme Test'; insert testAccount; // Query the test account that was inserted. Account testAccount2 = [SELECT Id, Name FROM Account WHERE Name='Acme Test' LIMIT 1]; System.assert(testAccount2 != null); } // Like the previous method, this test method can also access all data

    // because the containing class is annotated with @isTest(SeeAllData=true). @isTest static void myTestMethod2() { // Can access all data in the organization. } }
Ce deuxième exemple montre comment appliquer l'annotation isTest(SeeAllData=true) dans une méthode de test. La classe qui contient cette méthode de test n'est pas définie avec cette annotation. Par conséquent, vous devez appliquer cette annotation dans la méthode de test afin d'accorder l'accès à toutes les données pour la méthode. La deuxième méthode de test ne contient pas cette annotation. Par conséquent, elle peut accéder uniquement aux données qu'elle créée, en plus des objets utilisés pour gérer votre organisation, tels que les utilisateurs.
// This class contains test methods with different data access levels.

@isTest

private class ClassWithDifferentDataAccess {



    // Test method that has access to all data.

    @isTest(SeeAllData=true)

    static void testWithAllDataAccess() {

        // Can query all data in the organization.      

    }

    

    // Test method that has access to only the data it creates

    // and organization setup and metadata objects. @isTest static void testWithOwnDataAccess() { // This method can still access the User object.

        // This query returns the first user object. User u = [SELECT UserName,Email FROM User LIMIT 1]; System.debug('UserName: ' + u.UserName); System.debug('Email: ' + u.Email); // Can access the test account that is created here. Account a = new Account(Name='Test Account'); insert a; // Access the account that was just created. Account insertedAcct = [SELECT Id,Name FROM Account WHERE Name='Test Account']; System.assert(insertedAcct != null); } }

Annotation IsTest(OnInstall=true)

Utilisez l'annotation IsTest(OnInstall=true) pour spécifier les tests Apex qui sont exécutés durant l'installation d'un package. Cette annotation est utilisée pour des tests dans des packages gérés ou non gérés. Seules les méthodes de test avec cette annotation, ou les méthodes qui font partie d'une classe de test contenant cette annotation, sont exécutées durant l'installation d'un package. Les tests annotés pour être exécutés lors de l'installation d'un package doivent passer pour la réussite de l'installation du package. Il n'est plus possible de contourner un test échoué durant l'installation d'un package.Une méthode ou une classe de test qui ne contient pas cette annotation, ou qui est annotée avec isTest(OnInstall=false) ou isTest, n'est pas exécutée durant l'installation.

Cet exemple montre comment annoter une méthode de test qui est exécutée lors de l'installation d'un package. Dans cet exemple, la méthode test1 est exécutée, contrairement à test2 et à test3.

public class OnInstallClass {

   // Implement logic for the class.

   public void method1(){ // Some code } // This test method will be executed

   // during the installation of the package. @isTest(OnInstall=true) static void test1() { // Some test code } // Tests excluded from running during the

   // the installation of a package. @isTest static void test2() { // Some test code } static testmethod void test3() { // Some test code } }
© Copyright 2000–2013 salesforce.com, inc. Tous droits réservés.
Diverses marques de commerce appartenant à leur détenteur respectif.