[英]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会(正确地)产生一个错误,因为elements
是private
。 如何解决此错误? 我不想放置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.