Java 为什么JUnit数据点方法不适用于原语?

Java 为什么JUnit数据点方法不适用于原语?,java,junit,Java,Junit,运行以下MWE时,测试testdatapointsmethodfailsforprimitions失败,出现AssertionError:Never-found参数满足方法假设。违反了假设:[],但在取消对作为测试类静态成员创建的数据点的注释时,可以通过罚款TestDataPointsMethodWorksforbjects的工作原理却非常出色 为什么当通过方法创建时,JUnit不能识别作为原语的数据点,但作为对象的数据点却不能识别 import org.junit.experimental.t

运行以下MWE时,测试
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一起提供

下面是我如何修复它的:

  • 单击工具栏中的“项目结构”图标,或Ctrl+Alt+Shift+S打开项目设置
  • 单击“库”,然后单击“+”然后单击“来自Maven…”
  • 搜索Junit并选择Junit:Junit:4.12-beta-3,然后按照说明将jar文件保存到项目的lib/目录中
  • 返回主编辑器窗口的项目面板,展开面板中的“外部库”项。如果依赖项中有junit-4.11,这就是Intellij附带的。只需删除它并重新生成代码 之后,您可以将
    @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) {
        }