Java 为什么JUnit数据点方法不适用于原语?
运行以下MWE时,测试Java 为什么JUnit数据点方法不适用于原语?,java,junit,Java,Junit,运行以下MWE时,测试testdatapointsmethodfailsforprimitions失败,出现AssertionError:Never-found参数满足方法假设。违反了假设:[],但在取消对作为测试类静态成员创建的数据点的注释时,可以通过罚款TestDataPointsMethodWorksforbjects的工作原理却非常出色 为什么当通过方法创建时,JUnit不能识别作为原语的数据点,但作为对象的数据点却不能识别 import org.junit.experimental.t
testdatapointsmethodfailsforprimitions
失败,出现AssertionError:Never-found参数满足方法假设。违反了假设:[]
,但在取消对作为测试类静态成员创建的数据点的注释时,可以通过罚款<另一方面,code>TestDataPointsMethodWorksforbjects的工作原理却非常出色
为什么当通过方法创建时,JUnit不能识别作为原语的数据点,但作为对象的数据点却不能识别
import org.junit.experimental.theories.DataPoints;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;
@RunWith(Theories.class)
public class MWE {
// @DataPoints
// public static int[] primitiveArray = new int[] {1, 2, 3, 4, 5, 6};
@DataPoints
public static int[] primitiveMethod() {
return new int[] {1, 2, 3, 4, 5, 6};
}
@DataPoints
public static Integer[] objectMethod() {
return new Integer[] {1, 2, 3, 4, 5, 6};
}
@Theory
public void testDataPointsMethodFailsForPrimitives(int primitive) {
}
@Theory
public void testDataPointsMethodWorksForObjects(Integer primitive) {
}
}
这在JUnit的4.12测试版中似乎已经修复。下面是对该问题的描述及其解决方法:是的,该问题是由junit-4.11中的一个bug引起的。如果您使用Intellij,这一问题尤其严重,因为它默认与junit-4.11一起提供 下面是我如何修复它的:
@DataPoints
与基本数据类型一起使用,例如:
@DataPoints
public static int[] primitiveMethod() {
System.out.println("creating data points ...");
return new int[] {1, 2, 3, 4, 5, 6};
}
@Theory
public void testDataPointsMethodFailsForPrimitives(int primitive) {
}