Мне нужно протестировать controller. Я хочу разделить тест на 2 метода. Сначала в тесте производятся записи в базу данных и создание объекта controller (т.е. запуск конструктора). Разница между 1-ым методом теста и 2-ым в том, что второй охватывает методы, которые первый не охватил. Но запись в БД нужно выполнить чтобы оба метода работали.
Можно ли вынести инициализацию(запись в БД) в отдельный метод, который выполнится раньше тестовых методов, или вызвать метод из этих тестовых методов?
Мне нужно протестировать controller. Я хочу разделить тест на 2 метода. Сначала в тесте производятся записи в базу данных и создание объекта controller (т.е. запуск конструктора). Разница между 1-ым методом теста и 2-ым в том, что второй охватывает методы, которые первый не охватил. Но запись в БД нужно выполнить чтобы оба метода работали. Можно ли вынести инициализацию(запись в БД) в отдельный метод, который выполнится раньше тестовых методов, или вызвать метод из этих тестовых методов?
как я понимаю, речь идет о создании тестовых данных? для этого можно сделать спец метод (или спец класс с разными методами), сейчас даже специальная аннотация для такого метода, создающего тестовые данные, появилась
[quote="Billion"]запись в БД нужно выполнить чтобы оба метода работали. [/quote] как я понимаю, речь идет о создании тестовых данных? для этого можно сделать спец метод (или спец класс с разными методами), сейчас даже специальная аннотация для такого метода, создающего тестовые данные, появилась
Что-то не получается
@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, то во втором тестовом методе мне нужно его еще раз вызывать чтобы в БД были записи, или они уже будут?
Что-то не получается [color=green] @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 // ..... // ... } } [/color] [b]Non static method cannot be referenced from a static context: void Test_QuizController.initData()[/b] И еще не понятно: Если я в первом тестовом методе вызову initData, то во втором тестовом методе мне нужно его еще раз вызывать чтобы в БД были записи, или они уже будут?
Надо
private static void initData() {
если видишь такую ошибку.
И да, в каждом тестовом методе надо вызывать initData. Потому что данные существуют в контексте тестового метода и база "очищается" по его завершении.
Надо private [b]static[/b] void initData() { если видишь такую ошибку. И да, в каждом тестовом методе надо вызывать initData. Потому что данные существуют в контексте тестового метода и база "очищается" по его завершении.