Как получить доступ к переменным в методе @BeforeClass в JUnit - PullRequest
0 голосов
/ 11 октября 2018

Я использую Junit 4.12 для запуска модульных тестов.Я пытаюсь настроить тестовые объекты один раз, чтобы использовать все мои тесты в моем классе тестов, поэтому мне не нужно настраивать каждый тест.

Однако, когда я пытаюсь получить доступ к этим переменным из своих тестов,Я получаю ошибку.Может кто-нибудь объяснить мне, что мне нужно сделать, чтобы все работало?

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

import org.junit.Test;
import org.junit.BeforeClass;
import junit.framework.TestCase;

public class InventoryTest extends TestCase {
    private Inventory inv;

    @BeforeClass
    public void setupTestObjs() throws Exception {
        inv = new Inventory();

        Book b1 = new Book();
        CD c1 = new CD();
    }

    @Test
    public void testAddNew() {
        inv.addNew(b1);
        inv.addNew(b1);
    }
}

Я получаю сообщение об ошибке: Eclipse жалуется, что b1 не может быть разрешена в переменной.Тем не менее, я определил его в моем методе setupTestObj, который должен быть запущен до запуска любых тестов.Что мне нужно сделать, чтобы мои тесты могли видеть переменные в методе setupTestObj для запуска тестов?

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Ваш метод @BeforeClass должен быть статическим, как и переменные, к которым он обращается.Попробуйте следующий код, b1 должен быть доступен в testAddNew() сейчас.Обратите внимание, что я перешел b1 на уровень класса.

import org.junit.Test;
import org.junit.BeforeClass;
import junit.framework.TestCase;

public class InventoryTest extends TestCase {
    private static Inventory inv;
    private static Book b1;

    @BeforeClass
    public static void setupTestObjs() throws Exception {
        inv = new Inventory();

        b1 = new Book();
        CD c1 = new CD();
    }

    @Test
    public void testAddNew() {
        inv.addNew(b1);
        inv.addNew(b1);
    }
}
0 голосов
/ 11 октября 2018

Область действия b1 ограничена методом setupTestObjs().Поэтому к нему нельзя получить доступ в testAddNew().

(Вы не опубликовали ошибку своего компилятора, поэтому я предполагаю, что ошибка возникает в testAddNew().)

Чтобы это работалот.е.настройте b1 один раз для всех ваших тестов, вам нужно дать ему область видимости, т.е.объявляйте это сразу после inv.

Ваш метод setupTestObjs() и испытательные приборы должны быть static, чтобы @BeforeClass работал правильно.

...