Junit断言双数组

时间:2016-06-04 06:54:22

标签: java junit

如何断言double的两个数组包含相同的元素。有一些方法可以断言整数数组和其他基本类型包含相同的元素但不包含double s。

3 个答案:

答案 0 :(得分:7)

JUnit 4.12(实际上它已经是4.6的一部分,github上最老的版本)

org.junit.Assert.assertArrayEquals(double[] expecteds, double[] actuals, double delta)
org.junit.Assert.assertArrayEquals(String message, ddouble[] expecteds, double[] actuals, double delta)

https://github.com/junit-team/junit4/blob/r4.12/src/main/java/org/junit/Assert.java,源代码482和498

答案 1 :(得分:4)

如果您没有使用支持双数组比较的JUnit版本,那么最简单的解决方案是使用Arrays.equals

assertTrue(Arrays.equals(array1, array2));

然而,这无法应对Junit双重断言的舍入错误。

答案 2 :(得分:0)

通常,您将双精度与舍入误差的公差进行比较。使用Java 8和JUnit 5解决此问题的方法:

  public static final double TOLERANCE = 1e-9;

  @ParameterizedTest
  @MethodSource("getValues")
  public void testArrayOfDoublesEquals(double a, double b)
  {
    assertEquals(a, b, TOLERANCE);
  }

  private static Stream<Arguments> getValues() {
    double[] arrayA = new double[] {1.0, 2.097, 3.98000000001};
    double[] arrayB = new double[] {1.0, 2.097, 3.98000000000};

    List<Arguments> args = new ArrayList<>();
    for(int i = 0; i < arrayA.length; i++) {      
      args.add(Arguments.of(arrayA[i], arrayB[i]));
    }
    return args.stream();
  }

比assertArrayEquals好,因为您可以按元素可视化测试结果:

enter image description here