Salesforce
Apex Testing
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');