AP CS实验:initialsArray方法空数组测试失败问题求助
关于initialsArray方法测试中null断言的疑问
我是一名AP CS学生,正在进行数组相关的实验练习。我实现了initialsArray方法,用于将姓名数组中的元素转换为缩写形式(例如:Kent, Clark会转换为KC)。方法核心代码如下:
public String[] initialsArray() { String[] initials = new String[numberActive]; for (int i = 0; i < initials.length; i++) { initials[i] = "" + names[i].charAt(names[i].indexOf(",") + 2) + names[i].charAt(0); } return initials; }
其中numberActive代表数组中已填充元素的数量。
对应的测试方法testInitialsArray中,除了assertEquals(null,w1.initialsArray())这一行外,其余测试均正常通过。我不清楚这行测试的意图,因此求助。测试代码如下:
@Test public void testInitialsArray() { WaitingList w1 = new WaitingList(); assertEquals(null,w1.initialsArray()); w1.addName("Bushell, Greg"); w1.addName("Kent, Clark"); w1.addName("Crunch, Captain"); w1.addName("Fields, Justin"); w1.addName("Kent, Clark"); w1.addName("Wayne, Bruce"); w1.addName("Jordan, Michael"); String[] actualInitials = w1.initialsArray(); String[] expectedArrays = {"GB","CK","CC","JF","CK","BW","MJ"}; for(int i = 0; i < actualInitials.length; i++) { assertEquals(expectedArrays[i],actualInitials[i]); } }
这行测试的意图
这行测试是为了验证空列表场景:当WaitingList中还没有添加任何姓名时(此时numberActive为0),预期initialsArray方法返回null。
但你当前的实现里,当numberActive为0时,new String[0]会创建一个长度为0的空数组,而不是null,所以这行断言会失败。
解决方式
你有两种选择:
- 修改测试代码:更符合Java数组操作的常规是返回空数组而非null,因此可以把这行断言改成验证数组长度为0:
assertEquals(0, w1.initialsArray().length); - 修改实现代码:在方法开头添加判断,当
numberActive为0时返回null,匹配测试预期:public String[] initialsArray() { if (numberActive == 0) { return null; } String[] initials = new String[numberActive]; for (int i = 0; i < initials.length; i++) { initials[i] = "" + names[i].charAt(names[i].indexOf(",") + 2) + names[i].charAt(0); } return initials; }
内容的提问来源于stack exchange,提问作者Jimmy
相关产品推荐
相关产品推荐

