繁体   English   中英

JUnit:具有私有字段的测试构建器

[英]JUnit: test builder with private field

我是一个初学者,在类的构造函数中遇到JUnit测试问题。

我要测试的类称为IntSortedArray,如下所示:

public class IntSortedArray {

    private int[] elements; 
    private int size; 


    public IntSortedArray() {
        this.elements = new int[16];
        this.size = 0;
    }

    public IntSortedArray(int initialCapacity) throws IllegalArgumentException {
        if(initialCapacity < 0) {
            throw new IllegalArgumentException("Error - You can't create an array of negative length.");
        }
        else {
            elements = new int[initialCapacity];
            size = 0;
        }
    }

    public IntSortedArray(int[] a) {
        elements = new int[a.length + 16];
        for(int i = 0; i < a.length; i++)
            elements[i] = a[i];
        size = a.length;
        insertionSort(elements);
    }

    //other code...

}

使用Eclipse,我为JUnit创建了一个类:

public class IntSortedArrayUnitTest {

    private IntSortedArray isa;

    @Test
    public void testConstructorArray16Elements() {
        isa = new IntSortedArray();
        int expected = 0;
        for(int i: isa.elements) **<-- ERROR**
         expected += 1;
        assertEquals(expected, 16);
    }

}

我开始编写一个测试类,旨在测试IntSortedArray类的所有方法,包括构造函数。

第一个方法testConstructorArray16Elements()要测试第一个构建器。 因此,我想我将检查数组元素的创建是否正确完成,以便for循环计算elements长度,并确保它沿着16(根据需要)。

但是Eclipse会(正确地)产生一个错误,因为elementsprivate 如何解决此错误? 我不想放置public字段,如果可能的话,我想避免创建方法public int[] getElements()

您有什么推荐的吗?

另一个问题:我可以做两个断言相同的方法吗? 一个用于测试数组的长度,另一个用于测试size为0。

我希望不要犯大错,这是我第一次使用JUnit。

PS:如何测试第二个构造函数?

非常感谢你!

看来您的班级字段已声明为私有,但您尝试从班级外部进行访问。 您需要在类中提供访问器方法以使其可见:

private int[] elements;
private int size; 
public static final int MAX = 16;

public int[] getElements() { ... }
public int getSize() { return size; }

然后,您将可以编写以下代码:

isa = new IntSortedArray();
int expected = 0;
for(int i: isa.getElements()) {
  expected += 1;
}
assertEquals(expected, IntSortedArray.MAX );

看起来您的构造函数已经为16个整数创建了一个数组,但是没有使用任何值对其进行初始化。 为此,您应该具有以下代码:

public IntSortedArray() {
    this.elements = new int[MAX];
    this.size = 0;
    for (int i=0 ; i < MAX ;i++) {
       elements[i] = i;
       size++;
    }
}

您必须为数组编写一个getter方法,或实现一个Iterator

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM