我有一个使用这样理论的测试课:
@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 :(得分: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。