JUnit理论将params设置为null

时间:2016-12-01 10:42:00

标签: java junit junit4

我有一个使用这样理论的测试课:

@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。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

代码中的问题来自" init"订购。

xList 静态;因此,当您的测试类第一次加载时,将执行初始化程序代码。此时,两个字段x1和x2仍处于 null - 因为@Before方法将稍后运行

所以,简单地解决这个问题可能就是不要使用@Before,而是去找:

public static X x1 = new X();

代替。

答案 1 :(得分: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);
    }
}

要做的是为数组“xlist”中的每个值调用一次“singleTest”方法,因此将使用值调用3次

xList = 1
xList = 2
xList = 45

您不需要声明单个变量x1,x2。

相关问题