Salesforce
Apex-testning
Sök…
Ange metoder
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());
}
Grundläggande testklass
Den här IsBlank(...)
testar IsBlank(...)
för SomeClass
. Nedan SomeClass
exemplet SomeClass
. Den här klassen har endast den enda, grundläggande static
metoden, men du kommer inte att kunna distribuera den till en produktionsinstans för användning förrän du har nått tröskelvärdet för kodtäckning.
public class SomeClass {
public static Boolean IsBlank(String someData) {
if (someData == null) {
return true;
} else if (someData == '') {
return true;
} else {
return false;
}
}
}
Som man ser är denna metod helt enkelt en if
uttalande med tre grenar. För att skriva en effektiv testklass måste vi täcka varje gren med kod och använda System.assertEquals(...)
uttalanden för att verifiera att rätt data har IsBlank(...)
emot från 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));
}
}
Med testSetup
Du kan använda en metod som är antecknad med @testSetup
att skriva kod som kommer att ha körts före varje testkörning:
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');
}
}
Med statiska block
Medan du kan använda @testSetup
anteckningen för att utse en metod som ska köras innan test utförs, kommer den här metoden vanligtvis bara att köras en gång. Om du behöver köra för att köras före varje test kan du använda ett static
block:
@isTest
public class MyTest {
static {
// code here will be run before each test is executed
}
}
Påstående metoder
System.assert
kan användas för att kontrollera att ett booleskt uttryck utvärderar till sant:
System.assert(Service.isActive());
System.assert(!Service.getItems().isEmpty(), 'items should not be empty');
System.assertEquals
och System.assertNotEquals
kan användas för att kontrollera jämvikt mellan två värden. Det förväntade värdet passeras som den första parametern och värdet under test passeras som den andra.
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');