Salesforce
Тестирование Apex
Поиск…
Методы подтверждения
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());
}
Основной тестовый класс
Этот тестовый класс проверит метод IsBlank(...)
SomeClass
. Ниже приведен пример SomeClass
. Этот класс имеет только один базовый static
метод, но вы не сможете его развернуть в производственный экземпляр для использования до тех пор, пока не достигнете порога покрытия кода.
public class SomeClass {
public static Boolean IsBlank(String someData) {
if (someData == null) {
return true;
} else if (someData == '') {
return true;
} else {
return false;
}
}
}
Как видно, этот метод - это просто оператор if
с тремя ветвями. Чтобы написать эффективный класс тестов, мы должны покрыть каждую ветвь кодом и использовать System.assertEquals(...)
чтобы убедиться, что правильные данные были получены из 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));
}
}
Использование testSetup
Вы можете использовать метод, аннотированный с помощью @testSetup
для написания кода, который будет выполнен до каждого тестового прогона:
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');
}
}
Использование статических блоков
Хотя вы можете использовать аннотацию @testSetup
для обозначения метода, который должен быть запущен до того, как будут выполнены тесты, этот метод обычно запускается только один раз. Если вам нужен код для запуска перед каждым тестом, вы можете использовать static
блок:
@isTest
public class MyTest {
static {
// code here will be run before each test is executed
}
}
Методы утверждения
System.assert
может использоваться для проверки того, что логическое выражение оценивается как true:
System.assert(Service.isActive());
System.assert(!Service.getItems().isEmpty(), 'items should not be empty');
System.assertEquals
и System.assertNotEquals
могут использоваться для проверки равенства двух значений. Ожидаемое значение передается как первый параметр, а тестируемое значение передается как второе.
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');