运行以下MWE时,测试testDataPointsMethodFailsForPrimitives
失败并显示AssertionError: Never found parameters that satisfied method assumptions. Violated assumptions: []
但在取消注释作为测试类的静态成员创建的数据点时传递正常。另一方面,testDataPointsMethodWorksForObjects
只是花花公子。
为什么通过方法创建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) {
}
}
答案 0 :(得分:3)
看起来这已经在JUnit的4.12 beta版本中修复了。以下是该问题的说明及其解决方案:https://github.com/junit-team/junit/issues/637
答案 1 :(得分:0)
是的,问题是由junit-4.11中的错误引起的。如果你使用的是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) {
}