You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

数组索引≥i元素右移的JUnit测试有效性及实现问询

这个JUnit测试完全可行!咱们来补全并说明要点

首先得说,你这个测试的思路非常靠谱,核心逻辑抓得很准——用克隆数组做基准,先验证前i个元素没被改动,再验证右移的元素是否符合预期。只是后半段循环没写完,咱们来补全并把细节说清楚:

补全后的完整测试代码

@Test
public void testShiftElements() {
    String[] a = { "a", "b", "c", "d", "e" };
    String[] b = a.clone();
    int i = 1;
    Arrays.shiftElements(a, i);
    
    // 验证索引小于i的元素完全没被修改
    for (int j = 0; j < i; j++) {
        assertEquals(b[j], a[j]);
    }
    
    // 验证索引≥i的元素整体右移一位:原数组的b[j]应该对应新数组的a[j+1]
    for (int j = i; j < a.length - 1; j++) {
        assertEquals(b[j], a[j+1]);
    }
    
    // 这里要额外验证原数组最后一个元素的去向/索引i位置的取值!
    // 这取决于你shiftElements方法的实现逻辑:
    // 1. 如果是**循环右移**:把原最后一个元素放到索引i的位置,加这行:
    // assertEquals(b[a.length - 1], a[i]);
    // 2. 如果是**右移后索引i位置留空(补默认值)**:比如String类型补null,加这行:
    // assertNull(a[i]);
}

几个关键注意点

  • 测试完整性:光验证前i个元素不够,一定要覆盖右移后的元素对应关系,还有索引i位置的取值(这是很多人容易漏的点)
  • 边界用例不能少:建议额外加几个测试场景:
    • 当i = 0:整个数组右移,要验证所有元素都右移一位
    • 当i = a.length - 1:只有最后一个元素要右移,但数组长度不变,所以应该和原数组完全一致
    • 空数组、长度为1的数组:这类极端场景最容易出bug
  • 基准数组的正确性:你用a.clone()是完全正确的,这样能保证原数组不被测试方法修改,作为对照的基准值不会出错

内容的提问来源于stack exchange,提问作者Megumin123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:38:09