Ricerca…


Asserire metodi

static TestMethod void DmlTest() {
    List<Contact> allContacts = [SELECT Id FROM Contact];
    System.assert(allContacts.isEmpty());

    Contact testContact = new Contact(FirstName = 'John', LastName = 'Doe');
    insert testContact;
    allContacts = [SELECT Id FROM Contact];
    System.assertNotEquals(0, allContacts.size(), 'Optional message in case of failure');
    
    delete allContacts;
    allContacts = [SELECT Id FROM Contact];
    System.assertEquals(0, allContacts.size());
}

Classe di test di base

Questa classe di test IsBlank(...) metodo IsBlank(...) di SomeClass . Di seguito è riportato l'esempio SomeClass . Questa classe ha solo uno, metodo static base, ma non sarà possibile distribuirlo a un'istanza di produzione per l'uso fino a quando non si raggiunge la soglia di copertura del codice.

public class SomeClass {

    public static Boolean IsBlank(String someData) {
        if (someData == null) {
            return true;
        } else if (someData == '') {
            return true; 
        } else {
            return false;
        }
    }

}

Come si può vedere, questo metodo è semplicemente un'istruzione if con tre rami. Per scrivere una classe di test efficace, dobbiamo coprire ogni ramo con il codice e utilizzare le istruzioni System.assertEquals(...) per verificare che i dati corretti siano stati ricevuti da IsBlank(...) .

@isTest 
public class SomeClass_test {

    @isTest 
    public static void SomeClass_IsBlank_test() {

        String testData;

        // SomeClass.IsBlank() returns true for Null values
        System.assertEquals(true, SomeClass.IsBlank(testData)); 

        testData = '';
        
        // SomeClass.IsBlank() returns true for empty strings
        System.assertEquals(true, SomeClass.IsBlank(testData)); 

        testData = 'someData';

        // SomeClass.IsBlank() returns false when testData is neither
        // an empty string nor Null
        System.assertEquals(false, SomeClass.IsBlank(testData)); 

    }

}

Utilizzando testSetup

È possibile utilizzare un metodo annotato con @testSetup per scrivere codice che sarà stato eseguito prima di ogni esecuzione di test:

public class AccountService {
  public static Account fetchAccount() {
    return [ SELECT Id, Name FROM Account LIMIT 1 ];
  }
}
@isTest
public class AccountServiceTest {
  private static final String TEST_ACCOUNT_NAME = 'My Test Account';

  @testSetup
  public static void setUpAccountData() {
    Account a = new Account(Name = TEST_ACCOUNT_NAME);
  }

  @isTest
  public static void testFetchAccount() {
    Account a = AccountService.fetchAccount();
    System.assertNotEquals(null, a, 'Account should not be null');
    System.assertEquals(TEST_ACCOUNT_NAME, a.Name, 'Account name should be correct');
  }
}

Utilizzo di blocchi statici

Sebbene sia possibile utilizzare l'annotazione @testSetup per designare un metodo da eseguire prima dell'esecuzione dei test, questo metodo verrà eseguito di solito solo una volta. Se è necessario eseguire il codice prima di ogni test, è possibile utilizzare un blocco static :

@isTest
public class MyTest {
  static {
    // code here will be run before each test is executed
  }
}

Metodi di asserzione

System.assert può essere usato per verificare che l'espressione booleana sia vera:

System.assert(Service.isActive());
System.assert(!Service.getItems().isEmpty(), 'items should not be empty');

System.assertEquals e System.assertNotEquals possono essere utilizzati per controllare l'uguaglianza di due valori. Il valore previsto viene passato come primo parametro e il valore in prova viene passato come secondo.

System.assertEquals(4, Service.getItems().size());
System.assertNotEquals(null, Service.getItems());

// failure messages are optional:
System.assertEquals(true, Service.doWork(), 'doWork should return true');
System.assertNotEquals(null, Service.doWork(), 'doWork should not be null');


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow