Регистрация  |  Вход

Повторное использование кода в тестовом классе

Мне нужно протестировать controller. Я хочу разделить тест на 2 метода. Сначала в тесте производятся записи в базу данных и создание объекта controller (т.е. запуск конструктора). Разница между 1-ым методом теста и 2-ым в том, что второй охватывает методы, которые первый не охватил. Но запись в БД нужно выполнить чтобы оба метода работали.
Можно ли вынести инициализацию(запись в БД) в отдельный метод, который выполнится раньше тестовых методов, или вызвать метод из этих тестовых методов?

Мне нужно протестировать controller. Я хочу разделить тест на 2 метода. Сначала в тесте производятся записи в базу данных и создание объекта controller (т.е. запуск конструктора). Разница между 1-ым методом теста и 2-ым в том, что второй охватывает методы, которые первый не охватил. Но запись в БД нужно выполнить чтобы оба метода работали.
Можно ли вынести инициализацию(запись в БД) в отдельный метод, который выполнится раньше тестовых методов, или вызвать метод из этих тестовых методов?

Billion
запись в БД нужно выполнить чтобы оба метода работали.

как я понимаю, речь идет о создании тестовых данных? для этого можно сделать спец метод (или спец класс с разными методами), сейчас даже специальная аннотация для такого метода, создающего тестовые данные, появилась

[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. Потому что данные существуют в контексте тестового метода и база "очищается" по его завершении.