2016-12-01 2 views
0

У меня есть тестовый класс, который с помощью теории, как это:JUnit теорий множеств PARAMS обнулить

@RunWith(Theories.class) 
public class XTest(){ 
    public static X x1; 
    public static X x2; 
    @DataPoints("xlist") 
    public static X[] xList = {x1, x2}; 
} 

@Before 
public void setUp() throws Exception { 
     x1 = new X(); 
     x2 = new X(); 
} 

@Theory 
public void test(@FromDataPoints("xlist" x){ 
// x is null 
} 

Я не понимаю, почему я получаю x нулевой. Я пробовал то же самое с параметризованными тестами и все еще null. Что мне здесь не хватает?

+0

_xList_ создается до того, как 'setUp()' запускается, поэтому xList определяется как 'X [] xList = {null, null};'. Вы могли бы аннотировать установку с помощью [BeforeClass] (http://junit.sourceforge.net/javadoc/org/junit/BeforeClass.html) или инициализировать _x1_ и _x2_ в статической области. –

+0

@matansab вы попробовали решение, которое я вам даю? – cralfaro

ответ

1

Проблема в вашем коде исходит из порядка «init».

xList is статический; поэтому код инициализатора выполняется, когда ваш тестовый класс загружен в первый раз. В этот момент времени два поля x1 и x2 все еще находятся на null - по мере того, как метод @Before будет работать позже on.

Таким образом, просто исправить здесь может быть, чтобы не использовать @Before вообще, но идти на:

public static X x1 = new X(); 

вместо этого.

0

Я думаю, вы должны изменить структуру своего класса, чтобы заставить его работать, как я знаю о теории, это было бы правильно структура:

@RunWith(Theories.class) 
public class TheoryTest { 

    @DataPoints("xlist") 
    public static Integer[] xList = new Integer[] {new Integer(1), new Integer(2), new Integer(45)}; 


    @Theory 
    public void singleTest(@FromDataPoints("xlist") Integer x){ 
     // x is null 
     System.out.println("Size " +x); 
    } 
} 

Что собирается сделать, это вызвать ваш метод «singleTest» один раз для каждого из значений в массиве «xlist», так будет называться 3 раза со значениями

xList = 1 
xList = 2 
xList = 45 

Вам не нужно объявлять переменные одного x1, x2.

Смежные вопросы