Java:用迭代器测试方法

Java:用迭代器测试方法,java,unit-testing,junit,Java,Unit Testing,Junit,我的测试方法失败了。我不确定在迭代器中放置什么。当前为空。当有迭代器时,如何测试这一点 下面是一个完整的主类,它只需搜索数组并返回给定数字的索引: 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)

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

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

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);
    }
    }
}
公共类主{
公共静态void main(字符串[]args){
最终列表编号=Arrays.asList(3,4,6,1,9);
最终整数x=整数。值为(1);
System.out.println(findSame(numbers.iterator(),x,0));
}
公共静态final int findSame(迭代器迭代器、整数x、int idx){
如果(!iterator.hasNext()){
返回-1;
}
if(iterator.next().equals(x)){
返回idx;
}否则{
返回findSame(迭代器,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);  
    }
@测试
public void search numreturnsindex1(){
Main实例=新的Main();
系统输出打印项次(“索引”);
迭代器迭代器=null;
int x=6;
int expResult=2;
int result=Main.findSame(迭代器,x,2);
assertEquals(expResult,result);
}

您的测试应该是测试一些东西。像

  • 如果我有列表[2,3,5,7,11]并搜索7,则它应返回3
  • 如果我有列表[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));  
    }
    
    @测试
    在ShortListofPrimes()中对7的公共无效搜索{
    列表编号=数组.asList(2,3,5,7,11);
    assertEquals(3,Main.findSame(numbers.iterator(),7,0));
    }
    @试验
    在ShortListofPrimes()中对6的公共无效搜索{
    列表编号=数组.asList(2,3,5,7,11);
    assertEquals(-1,Main.findSame(numbers.iterator(),6,0));
    }
    

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

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

  • 如果我有列表[2,3,5,7,11]并搜索7,则它应返回3
  • 如果我有列表[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));  
    }
    
    @测试
    在ShortListofPrimes()中对7的公共无效搜索{
    列表编号=数组.asList(2,3,5,7,11);
    assertEquals(3,Main.findSame(numbers.iterator(),7,0));
    }
    @试验
    在ShortListofPrimes()中对6的公共无效搜索{
    列表编号=数组.asList(2,3,5,7,11);
    assertEquals(-1,Main.findSame(numbers.iterator(),6,0));
    }
    

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

    从解释您要做的事情开始。然后解释你被困在哪里。“那我们也许能帮上忙。”希莫塞尔刚做了。你要做的事情更清楚一些。但仍然不清楚你被困在哪里。为什么单元测试比
    main()
    中的工作代码更难?基本上我不知道在这里放置什么:int result=main.findSame(迭代器,x,2);迭代器还是数字迭代器?我尝试的每件事都不是真的在做什么。好吧,不要只是随便尝试;想想看。是什么在
    main()
    中生成迭代器的<代码>数字。什么是编号?名单。单元测试中有列表吗?从解释你要做什么开始。然后解释你被困在哪里。“那我们也许能帮上忙。”希莫塞尔刚做了。你要做的事情更清楚一些。但仍然不清楚你被困在哪里。为什么单元测试比
    main()
    中的工作代码更难?基本上我不知道在这里放置什么:int result=main.findSame(迭代器,x,2);迭代器还是数字迭代器?我尝试的每件事都不是真的在做什么。好吧,不要只是随便尝试;想想看。是什么在
    main()
    中生成迭代器的<代码>数字。什么是编号?名单。单元测试中有列表吗?