【问题标题】:JUnit with an expected boolean array not working具有预期布尔数组的 JUnit 不起作用
【发布时间】:2017-11-23 09:21:47
【问题描述】:

我写了一个方法,我必须输入两个 int 数组和一个 int 值。该方法通过两个数组并将每个索引除以 int 值。如果两个第一个索引都可以被值分割,它将 true 和 false 值存储在第三个(新)布尔数组中。

public class PIArrays {

    public boolean[] pairwiseContainsDividableBy(final int[] a, final int[] b, 
    final int divisor) {

    boolean[] result = new boolean [a.length];

    for(int i = 0; i < a.length; i++){
            if(a[i]%divisor == 0 && b[i]%divisor == 0){
                result[i] = true;
            }else{
                result[i] = false;
            }
        }
   return result; }
}

如果 a = {4,8,12}, b = {24,19,18} 并且除数 = 4,则结果变为 {true, false, false}。这一切都很好。再次,我的测试方法有问题:

public class PIArraysTest {

@Test
public void testPairwiseContainsDividableBy()
{
    PIArrays pIArrays1 = new PIArrays();
    assertEquals(new boolean[] {true,false,false}, 
       pIArrays1.pairwiseContainsDividableBy(new int[] {4,8,12},new int[] 
       {24,19,18}, 4));


   }
}

编译再次正常工作。但是,如果运行测试,我会收到此错误:

expected:<[Z@1bf585b> but was:<[Z@f2c2ba>
---
java.lang.AssertionError: expected:<[Z@1bf585b> but was:<[Z@f2c2ba>
at org.junit.Assert.fail(Assert.java:88)
at org.junit.Assert.failNotEquals(Assert.java:743)
at org.junit.Assert.assertEquals(Assert.java:118)
at org.junit.Assert.assertEquals(Assert.java:144)
at PIArraysTest.testPairwiseContainsDividableBy(PIArraysTest.java:76)

它将我重定向到这一行作为错误的来源:

assertEquals(new boolean[] {true,false,false}, 
    pIArrays1.pairwiseContainsDividableBy(new int[] {4,8,12},new int[] 
    {24,19,18}, 4));

编辑:

所以我尝试了一点并想出了这个:

@Test
public void testPairwiseContainsDividableBy()
{
   PIArrays pIArrays1 = new PIArrays();
   boolean[] test1 = pIArrays1.pairwiseContainsDividableBy(new int[]{4,8,12},new int[] {24,19,18}, 4);
   boolean[] result = {true, false, false};
   assertArrayEquals(result, test1);

}

这会导致编译器错误:不适合 assertArrayEquals 方法

【问题讨论】:

    标签: arrays junit boolean


    【解决方案1】:

    assertEquals(Object[], Object[]) 不按项目比较数组。因此它已被弃用,您应该使用assertArrayEquals(boolean[], boolean[])

    您至少需要 JUnit 4.12。 (见https://github.com/junit-team/junit4/commit/26d34db6c2c12b0fee9ae3d307b3f18fe0ee62da#diff-73eb269f6f932a6bd4cc17c2cfd54571

    【讨论】:

    • 所以我尝试了一下并想出了这个:我编辑了我的原始帖子
    • 您使用哪个版本的 JUnit?
    • BlueJ 导入了 JUnit 4.11 版。建议我们使用 BlueJ 以适应界面。我们的考试是在 BlueJ 中完成的。我修改后的代码是否正确?
    • 很遗憾,我没有找到将更新的 JUnit 版本与 BlueJ 一起使用的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2013-12-26
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-23
    相关资源
    最近更新 更多