为什么JUnit DataPoints方法不适用于原语?

时间:2014-11-27 21:27:40

标签: java junit

运行以下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) {
    }

}

2 个答案:

答案 0 :(得分:3)

看起来这已经在JUnit的4.12 beta版本中修复了。以下是该问题的说明及其解决方案:https://github.com/junit-team/junit/issues/637

答案 1 :(得分:0)

是的,问题是由junit-4.11中的错误引起的。如果你使用的是Intellij,这是特别有问题的,因为它默认带有junit-4.11。

以下是我修复它的方法:

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