Мне нужно протестировать controller. Я хочу разделить тест на 2 метода. Сначала в тесте производятся записи в базу данных и создание объекта controller (т.е. запуск конструктора). Разница между 1-ым методом теста и 2-ым в том, что второй охватывает методы, которые первый не охватил. Но запись в БД нужно выполнить чтобы оба метода работали.
Можно ли вынести инициализацию(запись в БД) в отдельный метод, который выполнится раньше тестовых методов, или вызвать метод из этих тестовых методов?
как я понимаю, речь идет о создании тестовых данных? для этого можно сделать спец метод (или спец класс с разными методами), сейчас даже специальная аннотация для такого метода, создающего тестовые данные, появилась
Что-то не получается
@isTest
private class Test_QuizController {
private void initData() {
insert new Test__c(Subject__c = 'Unit1');
Test__c test1 = [SELECT Question_Count__c FROM Test__c];
List<Question__c> questions = new List<Question__c>();
Question__c question1 = new Question__c(Question__c = 'Test Question',
Test__c = test1.Id,
Right_Variant__c = '2',
Variant_1__c = '1',
Variant_2__c = '2',
Variant_3__c = '3',
Variant_4__c = '4');
questions.add(question1);
Question__c question2 = new Question__c(Question__c = 'Test Question2',
Test__c = test1.Id,
Right_Variant__c = '4',
Variant_1__c = '1',
Variant_2__c = '2',
Variant_3__c = '3',
Variant_4__c = '4');
questions.add(question2);
insert questions;
}
@isTest
static void testMethod1() {
initData(); // на эту строку вываливается error
// .....
// ...
}
}
Non static method cannot be referenced from a static context: void Test_QuizController.initData()
И еще не понятно: Если я в первом тестовом методе вызову initData, то во втором тестовом методе мне нужно его еще раз вызывать чтобы в БД были записи, или они уже будут?
Надо
private static void initData() {
если видишь такую ошибку.
И да, в каждом тестовом методе надо вызывать initData. Потому что данные существуют в контексте тестового метода и база "очищается" по его завершении.