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

我是初学者,我在类的构造函数中遇到了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()

您有什么推荐的吗?

另一个问题:我可以做两个断言相同的方法吗? 一个用于测试arrays的长度,另一个用于测试该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