有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java:用迭代器测试方法

我的测试方法失败了。我不确定在迭代器中放置什么。当前为空。当有迭代器时,如何测试这一点

下面是一个完整的主类,它只需搜索数组并返回给定数字的索引:

public class Main {
    public static void main(String[] args) {

    final List<Integer> numbers = Arrays.asList(3, 4, 6, 1, 9);
    final Integer x = Integer.valueOf(1);
    System.out.println(findSame(numbers.iterator(), x, 0));
}
public static final int findSame(Iterator<Integer> iterator, Integer x, int idx) {
    if (!iterator.hasNext()) {
        return -1;
    }

    if (iterator.next().equals(x)) {
        return idx;
    } else {
        return findSame(iterator, x, idx+1);
    }
    }
}

这是我的测试试用方法,它不起作用

@Test
public void searchNumReturnsIndex1(){
    Main instance = new Main();    

    System.out.println("Index");

    Iterator<Integer> iterator = null;

    int x = 6;

    int expResult = 2;
    int result = Main.findSame(iterator, x, 2);

    assertEquals(expResult, result);  
    }

共 (1) 个答案

  1. # 1 楼答案

    你的测试应该是测试一些东西。比如

    1. “如果我有列表[2,3,5,7,11]并搜索7,它应该返回3”
    2. “如果我有列表[2,3,5,7,11]并搜索6,它应该返回-1”

    一旦你决定了你的测试应该是什么,它们应该是简短的、简单的东西,能够准确地测试一个案例

    @Test
    public void searchFor7InShortListOfPrimes() {
        List<Integer> numbers = Arrays.asList(2, 3, 5, 7, 11);
        assertEquals(3, Main.findSame(numbers.iterator(), 7, 0));  
    }
    
    @Test
    public void searchFor6InShortListOfPrimes() {
        List<Integer> numbers = Arrays.asList(2, 3, 5, 7, 11);
        assertEquals(-1, Main.findSame(numbers.iterator(), 6, 0));  
    }
    

    但测试应该涵盖所有可能性。比如,如果列表是降序的,或者根本没有排序呢。任何适合你的方法;如果你的算法根本不依赖于未排序/降序排序,就不要进行测试