Testing apex code - создание тест методов

Написание тест методов в Salesforce занимает важное место не только потому что так надо или просит заказчик. Потому что без минимального покрытия кода тестами вы не сможете запаковать ваш код в пакет или перенести код с development org на production org. Минимальное покрытие кода составляет 75%, хотя надо стремиться к совершенству. Написание тестов по сложности можно сопоставить с написанием самого приложения, а порой и выше. Есть много особенностей, без знания которых трудно будет написать тесты быстро. Тест методы можно размещать как в самом классе с тестируемым кодом, так и в отдельном тестовом классе.


Я советую размещать все тестовые методы в отдельном классе. Потом его проще запускать, делать изменения и передавать другому человеку.

Вот моя заготовка для тестового класса

 @isTest  
 private class HelloTests {  
      static testMethod void Test1() {  
           Profile profile = [select id, Name from profile where name='System Administrator'];  
           User user = new User(alias = 'tt01', email='testtest01@test.com', emailencodingkey='UTF-8', lastname='testtest01', languagelocalekey='en_US', localesidkey='en_US', profileid = profile.Id, timezonesidkey='America/Los_Angeles', username='testtest01@test.com');  
           insert user;  
           System.RunAs(user){  
               // подготовка данных для тестирования  
               test.startTest();  
               // непосредственно тестирование (вызов методов, проверка возвращаемых данных)  
               test.stopTest();  
           }  
      }  
 }  

Немного пояснений:

1. Для запуска тестов я создаю юзера с нужным мне профилем (для проверки правильности настройки прав доступа для нужного профиля). Если это не нужно, просто ставим System Administrator и проверяем только логику.

2. System.RunAs(user){ ... } фишка тест методов для запуска куда внутри фигурных скобок под нужных пользователем (которого мы создали).

3. ВАЖНО помнить что на тест методы распространяются те же самые ограничения salesforce. поэтому написать один большой тест метод, который будет проверять ВСЕ не получится. Более того не всегда получается даже подготовить все данные необходимые для проверки одного отдельного метода.
ВАЖНО: по-умолчанию тест методы не видят реальные данные из базы данных (если не указать для класса аннотацию @isTest(SeeAllData=true) явно. Но это не совсем правильно с той точки зрения что данные на разных оргах могут отличаться и тесты будут выполняться по разному). Поэтому данные надо подготавливать перед выполнением тестируемого коду.

4. test.startTest() и  test.stopTest() позволяют увеличить ограничения для нашего тест метода в 2 раза. Лимиты после команды test.startTest() сбрасываются и код между  test.startTest() и  test.stopTest() выполняется со своим набором ограничений. Использовать данные команду можно только 1 раз, так что разочарую тех, кто уже подумал о том о чем и я :)

!!! Удалять данные НЕ НУЖНО. Любые изменения в базе данных, сделанные во время тестирования будут автоматически удалены после завершения тест метода.

ЗАПУСК ТЕСТОВ

Вот пример запуска тестового класса Hello_World_Test





Комментарии

Отправить комментарий

Популярные сообщения из этого блога

Начало работы, первые шаги, hello world в Salesforce